Поделиться через


Практическое руководство. Использование DataGrid в смартфоне

Обновлен: Ноябрь 2007

Для смартфона можно создать такое же приложение, как программа Контакты.

ms229659.alert_note(ru-ru,VS.90).gifПримечание.

Если применяется версия платформы .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

Отображает оптимизированные для редактирования значения в столбцах текущей записи.

Готово

Принимает данные в диалоговом окне, обновляет базу данных и отображает основную форму.

Отмена

Отменяет изменения в диалоговом окне и отображает основную форму.

Чтобы создать проект и разработать основную форму

  1. В среде Visual Studio создайте проект для интеллектуальных устройств и задайте в качестве целевой платформы пакет SDK Windows Mobile 5.0 для смартфонов или стандартный пакет SDK Windows Mobile 6.

  2. В меню Данные выберите команду Добавить новый источник данных.

  3. Используйте Мастер настройки источника данных для подключения к базе данных Northwind с помощью сервера Microsoft SQL Server Compact Edition (поставщик данных платформы .NET Framework для SQL Server CE). База данных Northwind (Northwind.sdf) устанавливается в папку \Program Files\Microsoft SQL Server Compact Edition\v3.5\Samples.

    ms229659.alert_note(ru-ru,VS.90).gifПримечание.

    В Windows Vista для доступа к базе данных Northwind необходимо запустить Visual Studio под учетной записью администратора. Дополнительные сведения о добавлении базы данных см. в разделе Практическое руководство. Добавление базы данных в проект устройства.

  4. На странице Выбор объектов базы данных мастера выберите таблицу Продукты и все ее столбцы.

  5. Из Панели элементов добавьте элемент управления DataGrid в форму.

  6. Чтобы отобразить элемент управления DataGrid как список Контакты в смартфоне, установите его свойства, как показано в следующей таблице.

    Свойство DataGrid

    Значение

    ColumnHeadersVisible

    False

    RowHeadersVisible

    False

    GridLineColor

    Window

    Location

    Структура Point со значением -2 для x и -2 для y.

    Size

    Структура Size со значением 184 для ширины и 190 для высоты.

  7. Установите для свойства DataSource таблицу Заказы. Visual Studio добавляет к проекту объекты NorthwindDataSet, ProductsBindingSource и ProductsTableAdapter.

  8. Щелкните свойство TableStyles в области Свойства. Это действие открывает диалоговое окно Редактор коллекции DataGridTableStyle. Затем выполните следующие действия:

    1. Добавьте объект DataGridTableStyle к коллекции TableStyles.

    2. Для свойства MappingName укажите "Продукты".

    3. Щелкните свойство GridColumnStyle. Это действие приведет к появлению диалогового окна Редактор коллекции DataGridColumnStyle.

    4. Добавьте объект DataGridTextBoxColumn в коллекцию GridColumnStyles.

    5. Щелкните свойство MappingName и выберите Название продукта.

    6. Установите требуемые Текст заголовка и Ширину.

    7. Повторите эти действия для дополнительных столбцов.

    8. Закройте диалоговые окна.

  9. Добавьте две формы к проекту — одну для представления сводки и одну для представления редактирования. Задайте для них имена SummaryView и EditView.

  10. Добавьте параметр к конструкторам форм 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();
    }
    
  11. В основной форме добавьте объекты 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);
        }
    }
    
  12. В основной форме добавьте код для события 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();
         }
    }
    

Создание представления сводки

  1. Добавьте следующие элементы управления в форму.

    • Элемент управления Label для заголовка названия продукта, например, "Название продукта:".

    • Элемент управления Label для значения "Название продукта".

    • Элемент управления Label для значения снятия с производства, которое отображается в случае, если в столбце "Снят с производства" таблицы "Продукты" установлено значение true. В качестве текста подписи укажите "СНЯТ С ПРОИЗВОДСТВА", использовав шрифт красного цвета.

  2. Добавьте следующий код к конструктору формы 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;
        }
    }
    
  3. Добавьте объект 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();
    }
    

Создание представления редактирования

  1. Добавьте ссылку на пространство имен Microsoft.WindowsCE.Forms в проекте. Это требуется, чтобы установить параметр InputMode смартфона в элементах управления текстового поля.

  2. Добавьте следующие элементы управления в форму.

    • Элемент управления Label для тестового поля "Название продукта".

    • Элемент управления TextBox для столбца "Название продукта".

    • Элемент управления CheckBox для значения "Снят с производства".

  3. Чтобы задать привязки данных, добавьте в конструктор формы следующий код после вызова 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");
        }
    }
    
  1. Добавьте объект 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();
    }
    
  1. Добавьте объект 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)

Другие ресурсы

Поддержка доступа к данным и XML в .NET Compact Framework