Выбрать главу

  chkDesc2.Checked = False

  cboRowState1.SelectedItem = "CurrentRows"

  cboRowState2.SelectedItem = "CurrentRows"

  dsCustomers.Tables("Customers").DefaultView.Sort = "ID"

  dvView2.Sort = "ID"

  ' Связывание сеток данных с таблицей.

  DataGrid1.DataSource = dsCustomers.Tables("Customers").DefaultView

  DataGrid2.DataSource = dvView2

 End Sub

 Private Sub btnApply1_Click(ByVal sender As System.Object, _

  ByVal e As System.EventArgs) Handles btnApply1.Click

  Dim sort As String

  Dim rowState As DataViewRowState

  ' Указание фильтра.

  dsCustomers.Tables("Customers").DefaultView.RowFilter = _

   txtFilter1.Text

  ' Указание сортировки.

  sort = cboSort1.SelectedItem

  If chkDesc1.Checked Then

   sort = sort & " DESC"

  End If

  dsCustomers.Tables("Customers").DefaultView.Sort = sort

  ' Указание состояния записи.

  dsCustomers.Tables("Customers").DefaultView.RowStateFilter = _

   rowState.Parse(rowState.GetType, cboRowState1.SelectedItem)

 End Sub

 Private Sub btnApply2_Click(ByVal sender As System.Object, _

  ByVal e As System.EventArgs) Handles btnApply2.Click

  Dim sort As String

  Dim rowState As DataViewRowState

  ' Указание фильтра.

  dvView2.RowFilter = txtFilter2.Text

  ' Указание сортировки.

  sort = cboSort2.SelectedItem

  If chkDesc2.Checked Then

   sort = sort & " DESC"

  End If

  dvView2.Sort = sort

  ' Указание состояние записи.

  dvView2.RowStateFilter = rowState.Parse(rowState.GetType, _

   cboRowState2.SelectedItem)

 End Sub

End Class

Подпрограмма frmDataViews_Load инициализирует разные объекты формы. Сначала создается объект DataAdapter, который затем используется для загрузки данных из таблицы базы данных в таблицу Customers набора данных DataSet. Далее создаются два представления данных: одно будет содержать создаваемое по умолчанию представление, а другое — новое представление dvView2. Далее объект-представление dvView2 инициализируется для отображения всех текущих записей с сортировкой по фамилии, т.е. по полю LastName.

После этого инициализируются два набора полей со списками. В поле со списком cboSort загружается список имен полей таблицы Customers, а в поле со списком cboRowState — список значений перечисления DataViewRowState.

НА ЗАМЕТКУ

В Visual Basic больше не поддерживается свойство ItemData. Дело в том, что вместо него для преобразования значений перечисления в строки для загрузки их в поле со списком используется метод GetNames перечисления. Аналогично, метод Parse перечисления используется для преобразования строк в значения перечисления при присвоении избранных значений свойству RowStateFilter.

Затем для элементов управления с критериями отбора записей задаются значения по умолчанию, т.е. исходный порядок сортировки для обоих представлений задается по полю ID. Наконец, каждое представление связывается с одной из сеток данных, что приводит к отображению в них всех текущих данных.

Избранные значения критериев применяются для соответствующего представления после щелчка на кнопке Apply. Две подпрограммы btnApplyl_Click и btnApply2_Click идентичны, за исключением того, что они относятся к разным наборам элементов управления. Фильтр записей (значение свойства RowFilter) задается на основании указанного текста в текстовом поле txtFilter, порядок сортировки (значение свойства Sort) — на основании выбранного поля в поле со списком cboSort (с дополнительным модификатором DESC нисходящего порядка), а фильтр состояния записи (значение свойства RowStateFilter) — на основании значения в поле со списком cboRowState2. Изменение свойств представлений, связанных с сетками данных, приводит к автоматическому отображению данных с новыми параметрами представления.

Скомпонуем проект DataSetCode и запустим полученное приложение. Щелкните на кнопке Data Views для отображения новой формы frmDataViews. Внесите необходимые изменения в критерии сетки и щелкните на кнопке Apply для внесения этих изменений в соответствующую сетку. На рис. 7.4 показан пример отображения данных из одной таблицы в двух разных представлениях.

Попробуйте выбрать разные поля сортировки и состояния записей для организации разных представлений. Попробуйте использовать разные фильтры, например сложные выражения ID > 10 AND ID < 18 или LastName Like с. Более подробные сведения о правилах создания фильтров приводятся в разделе с описанием свойства DataColumn.Expression справки Visual Studio .NET.

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

РИС. 7.4. Пример отображения данных из одной таблицы в двух разных представлениях формы frmDataViews

НА ЗАМЕТКУ

Обратите внимание, как разные представления одной таблицы данных отображаются в сетках данных. Если вставить, изменить или удалить запись в одном представлении (и применить изменение за счет перехода к следующей записи), то внесенные изменения будут автоматически отображены в другом представлении (если, конечно, эта запись соответствует заданному фильтру).