Рассмотрим теперь, как описанные выше идеи применяются на практике. Создайте новую форму frmDataViews в проекте DataSetCode (готовая версия этой формы находится в каталоге с примерами главы 5, "ADO.NET: объект DataSet") для создания двух разных представлений одной таблицы Customers. Каждый объект DataGrid отображает данные представления и содержит кнопки управления сортировкой и фильтрацией. Для этого выполните перечисленные ниже действия.
1. В форме frmDataSets проекта DataSetCode создайте новую кнопку под кнопкой Data Adapter Updates.
2. В окне Properties укажите значение btnDataViews для свойства (Name) и значение Data Views для свойства Text этой кнопки.
3. Создайте новую форму.
4. В окне Properties укажите значение frmDataViews для свойства (Name) и значение Dueling Data Views для свойства Text новой формы Form1.
5. Увеличьте размер формы frmDataViews.
6. Создайте в правой части формы сетку данных DataGrid1, текстовое поле txtFilter1 с надписью, поле со списком cboSort1 и надписью, флажок chkDesc1 с надписью, поле со списком cboRowState1 и надписью, кнопку btnApply1, перетаскивая их из панели элементов управления.
7. В окне Properties укажите значение Descending для свойства Text флажка chkDesc1 и значение Apply для свойства Text кнопки btnApply1. Укажите значение DropDownList для свойства DropDownStyle полей со списком cboSort1 и cboRowState1. Укажите для свойства Text надписей значения by Column: и Row State.
8. Укажите значение Default Data View для свойства CaptionText сетки DataGrid1.
9. Расположите элементы управления так, как показано на рис. 7.2.
РИС. 7.2. Расположение элементов управления в верхней части формы frmDataViews
РИС. 7.З. Окончательный вид формы frmDataViews
10. Выберите все элементы управления и скопируйте их в нижнюю часть формы frmDataViews. Переименуйте все элементы управления (за исключением надписей) так, чтобы их имена заканчивались цифрой 2, а не 1 (например, btnApply2).
11. Укажите значение DataView2 для свойства CaptionText сетки DataGrid2.
Окончательный вид формы frmDataViews показан на рис. 7.3, а ее код представлен в листинге 7.6.
Листинг 7.6. Код создания двух объектов-сеток для отображения разных представлений одной таблицы данных
Imports System
Imports System.Data
Imports System.Data.SqlClient
Public Class frmDataViews
Inherits System.Windows.Forms.Form
"Windows Form Designer generated code"
Private dsCustomers As New DataSet()
Private dvView2 As DataView
Private Sub frmDataViewS_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim i As Integer
Dim col As DataColumn
' Инициализация объекта DataAdapter.
Dim daCustomers As SqlDataAdapter = New _
SqlDataAdapter("select * from tblCustomer", _
"server=localhost;uid=sa;database=novelty")
' Вставка данных только в ОДНУ таблицу.
daCustomers.Fill(dsCustomers, "Customers")
' Создание второго объекта DataView.
dvView2 = New DataView(dsCustomers.Tables("Customer"), _
"", "LastName", DataViewRowState.CurrentRows)
' Вставка списка из имен полей.
For Each col In dsCustomers.Tables("Customers.Columns")
cboSort1.Items.Add(col.ColumnName)
cboSort2.Items.Add(col.ColumnName)
Next
' Вставка объекта DataViewRowState.
Dim names As String()
names = DataViewRowState.None.GetNames(DataViewRowState.None.GetType)
For i = 0 To names.GetUpperBound(0)
cboRowState1.Items.Add(names(i))
cboRowState2.Items.Add(names(i))
Next
' Указание значений по умолчанию.
txtFilter1.Text = ""
txtFilter2.Text = ""
cboSort1.SelectedItem = "ID"
cboSort2.SelectedItem = "ID"
chkDesc1.Checked = False
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
' Указание фильтра.
Читать дальше