Практическое руководство. Использование DataGrid в смартфоне
Обновлен: Ноябрь 2007
Для смартфона можно создать такое же приложение, как программа Контакты.
![]() |
---|
Если применяется версия платформы .NET Compact Framework до версии 3.5, необходимо добавить в проект ссылку на файл System.Windows.Forms.DataGrid.dll, чтобы использовать его. |
В этом примере показана основная форма со списком названий продуктов в элементе управления DataGrid из базы данных Northwind, установленной с приложением Visual Studio. В нем также содержится форма представления сводки для отображения текущей записи и форма представления изменений для редактирования данных и добавления новых записей. Объект BindingSource обеспечивает доступ к текущей выбранной записи в базе данных. Дополнительно к элементам управления привязки данных объект BindingSource может вернуть объект DataRowView текущей строки. Объект DataRowView можно использовать для доступа к данным в различных целях, таких как определение текущего значения столбца.
А кроме того, можно использовать Visual Studio для автоматического создания форм сводки и редактирования, выбрав Создать формы данных из контекстного меню смарт-тега в элементе управления DataGrid. Обратите внимание, что в целях демонстрации в этом примере используются только два столбца для форм сводки и редактирования.
Данное приложение имеет формы, описанные в следующей таблице. Также перечислены параметры меню для левой и правой программных клавиш смартфона.
Форма |
Функции |
Левая программная клавиша |
Правая программная клавиша |
---|---|---|---|
основная форма (Form1) |
Отображает один столбец таблицы в элементе управления DataGrid в виде списка контактов в смартфоне. При нажатии кнопки Действие или ВВОД на клавиатуре или эмуляторе отображается форма представления сводки. |
Создать Добавляет новую запись к базе данных и отображает форму EditView. |
Правка Отображает форму EditView. |
SummaryView |
Отображает оптимизированные для просмотра значения в столбцах текущей записи. |
Готово Возвращает к основной форме. |
(отсутствует) |
EditView |
Отображает оптимизированные для редактирования значения в столбцах текущей записи. |
Готово Принимает данные в диалоговом окне, обновляет базу данных и отображает основную форму. |
Отмена Отменяет изменения в диалоговом окне и отображает основную форму. |
Чтобы создать проект и разработать основную форму
В среде Visual Studio создайте проект для интеллектуальных устройств и задайте в качестве целевой платформы пакет SDK Windows Mobile 5.0 для смартфонов или стандартный пакет SDK Windows Mobile 6.
В меню Данные выберите команду Добавить новый источник данных.
Используйте Мастер настройки источника данных для подключения к базе данных Northwind с помощью сервера Microsoft SQL Server Compact Edition (поставщик данных платформы .NET Framework для SQL Server CE). База данных Northwind (Northwind.sdf) устанавливается в папку \Program Files\Microsoft SQL Server Compact Edition\v3.5\Samples.
Примечание.
В Windows Vista для доступа к базе данных Northwind необходимо запустить Visual Studio под учетной записью администратора. Дополнительные сведения о добавлении базы данных см. в разделе Практическое руководство. Добавление базы данных в проект устройства.
На странице Выбор объектов базы данных мастера выберите таблицу Продукты и все ее столбцы.
Из Панели элементов добавьте элемент управления DataGrid в форму.
Чтобы отобразить элемент управления DataGrid как список Контакты в смартфоне, установите его свойства, как показано в следующей таблице.
Свойство DataGrid
Значение
False
False
Структура Point со значением -2 для x и -2 для y.
Структура Size со значением 184 для ширины и 190 для высоты.
Установите для свойства DataSource таблицу Заказы. Visual Studio добавляет к проекту объекты NorthwindDataSet, ProductsBindingSource и ProductsTableAdapter.
Щелкните свойство TableStyles в области Свойства. Это действие открывает диалоговое окно Редактор коллекции DataGridTableStyle. Затем выполните следующие действия:
Добавьте объект DataGridTableStyle к коллекции TableStyles.
Для свойства MappingName укажите "Продукты".
Щелкните свойство GridColumnStyle. Это действие приведет к появлению диалогового окна Редактор коллекции DataGridColumnStyle.
Добавьте объект DataGridTextBoxColumn в коллекцию GridColumnStyles.
Щелкните свойство MappingName и выберите Название продукта.
Установите требуемые Текст заголовка и Ширину.
Повторите эти действия для дополнительных столбцов.
Закройте диалоговые окна.
Добавьте две формы к проекту — одну для представления сводки и одну для представления редактирования. Задайте для них имена SummaryView и EditView.
Добавьте параметр к конструкторам форм SummaryView и EditView, чтобы они могли принимать объект BindingSource. Объявите в этих формах глобальную переменную CurrentBindingSouce, которой будет присвоено значение объекта BindingSource, переданного в конструктор. Обратите внимание, что переменную нужно задавать перед вызовом метода InitializeComponent.
Разработчики Visual Basic должны добавить в форму процедуру Sub New путем добавления метода Новый из списка Имя метода, расположенного в правой верхней части области кода.
Dim CurrentBindingSource As BindingSource Public Sub New(ByVal bsource As BindingSource) CurrentBindingSource = bsource InitializeComponent() End Sub
private BindingSource CurrentBindingSource; public SummaryView(BindingSource bsource) { CurrentBindingSource = bsource; InitializeComponent(); }
В основной форме добавьте объекты MenuItem с именами Создать(MenuItem1) и Правка (MenuItem2). Эти меню соответствуют левой и правой программным клавишам смартфона. Добавьте следующий код для событий Создать и ПравкаClick.
' Add new record. Private Sub MenuItem1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MenuItem1.Click ProductsBindingSource.AddNew() Dim EditViewDialog As New EditView(ProductsBindingSource) If EditViewDialog.ShowDialog() <> DialogResult.OK Then ProductsBindingSource.CancelEdit() Else ProductsBindingSource.EndEdit() ProductsTableAdapter.Update(Me.NorthwindDataSet) End If End Sub ' Edit record. Private Sub MenuItem2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MenuItem1.Click Dim EditViewDialog As New EditView(ProductsBindingSource) If EditViewDialog.ShowDialog() <> DialogResult.OK Then ProductsBindingSource.CancelEdit() Else ProductsBindingSource.EndEdit() ProductsTableAdapter.Update(Me.NorthwindDataSet) End If End Sub
// Add new record. private void menuItem1_Click(object sender, EventArgs e) { productsBindingSource.AllowNew = true; productsBindingSource.AddNew(); EditView EditViewDialog = new EditView(productsBindingSource); if (EditViewDialog.ShowDialog() != DialogResult.OK) { productsBindingSource.CancelEdit(); } else { ProductsBindingSource.EndEdit(); this.productsTableAdapter.Update(this.northwindDataSet); } } // Edit record (Edit). private void menuItem2_Click(object sender, EventArgs e) { EditView EditViewDialog = new EditView(productsBindingSource); if (EditViewDialog.ShowDialog() != DialogResult.OK) { productsBindingSource.CancelEdit(); } else { productsBindingSource.EndEdit(); this.productsTableAdapter.Update(this.northwindDataSet); } }
В основной форме добавьте код для события KeyDown, которое создается при нажатии кнопки действия на смартфоне. Это действие отображает форму SummaryView.
Private Sub DataGrid1_KeyDown(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.KeyEventArgs) _ Handles DataGrid1.KeyDown If (e.KeyCode = Keys.Enter) Then Dim SummaryViewDialog As SummaryView = New SummaryView(ProductsBindingSource) Cursor.Current = Cursors.Default SummaryView.ShowDialog() End If End Sub
private void dataGrid1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { SummaryView SummaryViewDialog = new SummaryView(productsBindingSource); SummaryViewDialog.ShowDialog(); } }
Создание представления сводки
Добавьте следующие элементы управления в форму.
Элемент управления Label для заголовка названия продукта, например, "Название продукта:".
Элемент управления Label для значения "Название продукта".
Элемент управления Label для значения снятия с производства, которое отображается в случае, если в столбце "Снят с производства" таблицы "Продукты" установлено значение true. В качестве текста подписи укажите "СНЯТ С ПРОИЗВОДСТВА", использовав шрифт красного цвета.
Добавьте следующий код к конструктору формы SummaryView, чтобы задать привязки данных. Объявите переменную формы с именем CurrentBindingSource, которая будет задана переданному экземпляру объекта BindingSource, в конструкторе формы. Объект DataRowView определяет, что в случае, если для столбца "Снят с производства" задано значение true, будет отображаться подпись "Снят с производства".
Public Sub New(ByVal bsource As BindingSource) CurrentBindingSource = bsource ' This call is required by the Windows Forms Designer. InitializeComponent() ' Bind the label that shows the product name. ProductNameLabelVal.DataBindings.Add("Text", _ CurrentBindingSource, "Product Name") ' Show the Discontinued label if ' that value is true in the database. Dim drView As DataRowView drView = CurrentBindingSource.Current If drView.Item("Discontinued") = True Then DiscontinuedLabel.Visible = True Else DiscontinuedLabel.Visible = False End If End Sub
private BindingSource CurrentBindingSource; public SummaryView(BindingSource bsource) { CurrentBindingSource = bsource; InitializeComponent(); // Bind the label that shows the product name. ProductNameLabelVal.DataBindings.Add("Text", CurrentBindingSource, "Product Name"); // Show the Discontinued label if // that value is true in the database. DataRowView drView; drView = (DataRowView) CurrentBindingSource.Current; if (drView["Discontinued"] == true) { DiscontinuedLabel.Visible = true; } else { DiscontinuedLabel.Visible = false; } }
Добавьте объект MenuItem, озаглавленный Готово, для левой программной клавиши, чтобы закрыть форму и вернуться к основной форме.
Private Sub MenuItem1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MenuItem1.Click Me.Close End Sub
private void MenuItem1_Click(object sender, System.EventArgs e) { this.Close(); }
Создание представления редактирования
Добавьте ссылку на пространство имен Microsoft.WindowsCE.Forms в проекте. Это требуется, чтобы установить параметр InputMode смартфона в элементах управления текстового поля.
Добавьте следующие элементы управления в форму.
Чтобы задать привязки данных, добавьте в конструктор формы следующий код после вызова InitializeComponent. Этот код обеспечивает добавление новой или изменение существующей записи. Если добавляется новая запись, объект DataRowView определяет, имеет ли столбец "Снят с производства" нулевое значение. Если значение нулевое, устанавливается флажок false.
Public Sub New(ByVal bsource As BindingSource) CurrentBindingSource = bsource ' This call is required by the Windows Forms Designer. InitializeComponent() ' Add any initialization after the InitializeComponent() call. ' Set the Smartphone input mode. InputModeEditor.SetInputMode(ProductNameTextBox,_ InputMode.AlphaT9) ProductNameTextBox.DataBindings.Add("Text",_ CurrentBindingSource, "Product Name") ' Determine the Discontinued value. ' If null, change to False. Dim drView As DataRowView drView = CurrentBindingSource.Current ' Set the bindings. If IsDBNull(drView("Discontinued")) Then DiscontinuedCheckBox.DataBindings.Add("CheckState",_ CurrentBindingSource, "Discontinued", True,_ DataSourceUpdateMode.OnValidation, False, "") Else DiscontinuedCheckBox.DataBindings.Add("Checked",_ CurrentBindingSource, "Discontinued") End If End Sub
public EditView(BindingSource bsource) { CurrentBindingSource = bsource; InitializeComponent(); // Set the Smartphone input mode. InputModeEditor.SetInputMode(ProductNameTextBox, InputMode.AlphaT9); // Set the bindings. ProductNameTextBox.DataBindings.Add("Text", CurrentBindingSource,"Product Name"); // Determine the Discontinued value. // If null, change to False. DataRowView drView; drView = (DataRowView) CurrentBindingSource.Current; if(drView("Discontinued")== null) { DiscontinuedCheckBox.DataBindings.Add("CheckState", CurrentBindingSource, "Discontinued", true,DataSourceUpdateMode.OnValidation,false,""); } else { DiscontinuedCheckBox.DataBindings.Add("Checked", CurrentBindingSource, "Discontinued"); } }
Добавьте объект MenuItem, озаглавленный Готово, для левой программной клавиши, чтобы обновить базу данных и вернуться к основной форме.
Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click Me.DialogResult = DialogResult.OK Me.Close() End Sub
Private void MenuItem1_Click(object sender, System.EventArgs e) { this.DialogResult = DialogResult.OK; this.Close(); }
Добавьте объект MenuItem, озаглавленный Отмена, для правой программной клавиши, чтобы отменить изменения и вернуться к основной форме.
Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click Me.DialogResult = DialogResult.Cancel Me.Close() End Sub
Private void MenuItem2_Click(object sender, System.EventArgs e) { this.DialogResult = DialogResult.Cancel; this.Close(); }
Компиляция кода
Для этого примера требуются ссылки на следующие пространства имен:
См. также
Задачи
Практическое руководство. Использование DataGrid в карманном ПК
Основные понятия
Создание объектов DataSet со строгой типизацией (ADO.NET)