Чтение онлайн

ЖАНРЫ

Обработка баз данных на Visual Basic®.NET

Прайс Кевин Т.

Шрифт:

' Вставка данных только в ОДНУ таблицу.

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

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

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

НА ЗАМЕТКУ

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

Поделиться с друзьями: