С помощью DataView мы можем создавать различные представления данных, хранящихся в DataTable. Например, с помощью DataView вы можете использовать разные порядки сортировки для просмотра данных в DataTable или фильтровать данные в DataTable на основе состояния столбца данных или выражений фильтра. Важно то, что когда нам нужно создать разные представления для данных в DataTable и привязать эти данные к элементам управления в форме, нам нужно использовать DataView для завершения этого.
DataView предоставляет динамическое представление данных, то есть его содержимое, порядок сортировки и элементы будут отражать любые изменения в исходном DataTable. Очевидно, что DataView сильно отличается от метода DataTable.Select. Метод Select возвращает массив объектов DataRow из таблицы данных на основе определенного выражения фильтра или порядка сортировки, а его члены и порядок сортировки являются статическими. Благодаря динамическому реактивному характеру DataView он очень удобен для использования в приложениях привязки данных.
DataView предоставляет вам динамическое представление одной коллекции данных. К коллекции данных можно применять различные порядки сортировки и условия фильтрации. Это в некоторой степени похоже на представление, предоставляемое базой данных SQL Server. Однако между DataView и представлением базы данных все еще существует большая разница, поскольку DataView не может использоваться как таблица данных и не может предоставить представление для подключения таблицы данных. Кроме того, вы не только не можете исключать поля в таблице исходных данных, но и добавлять дополнительные поля, которых нет в таблице исходных данных (например: поля выражений).
Вы можете создать DataView двумя способами. Первый способ — использовать конструктор DataView, а второй — создать ссылку на свойство DefaultView DataTable. В этой статье подробно рассматривается, как использовать эти два метода для создания DataView.
Использование конструктора DataView
Конструктор DataView предоставляет три версии мультизагрузки, как показано в таблице ниже.
Многозагрузочная версия конструктора DataView
Просмотр данных()
DataView (таблица ByVal как DataTable)
DataView (таблица ByVal As DataTable, _
ByVal RowFilter As String, _
ByVal Сортировать как строку, _
ByVal RowState как DataViewRowState)
Первая версия конструктора DataView инициализирует новый экземпляр класса DataView без каких-либо параметров. Обратите внимание: если вы используете эту версию для создания DataView, вам необходимо сначала установить свойство Table после создания объекта DataView, чтобы определить его исходный DataTable, а затем вы можете продолжить установку других свойств (RowFilter, Sort... и т. д.). .
Следующий программный код демонстрирует, как использовать первую версию конструктора DataView для создания объекта DataView для фильтрации и сортировки столбцов данных таблицы данных «Zhang Limin Studio» в наборе данных и привязки элемента управления DataGridView к этому. Просмотр данных. Мы обнаружили, что элемент управления DataGrid будет отображать только женщин, а данные будут расположены в порядке написания имен от большего к меньшему. Ниже приведен программный код для этого примера:
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
'Создаем объект DataView
Dim dv As DataView = New DataView
' Поскольку для создания объекта DataView используется конструктор DataView без каких-либо параметров,
' Поэтому сначала необходимо установить свойство Table, чтобы определить его источник DataTable.
dv.Table = Ds Zhang Limin Studio. Zhang Limin Studio
' Установите порядок сортировки так, чтобы порядок штрихов имени располагался от большего к меньшему.
dv.Sort = "NameDESC"
'Установить условия фильтра для отображения только женщин
dv.RowFilter = "Gender = 'Female'"
' Привязываем элемент управления DataGridView к DataView
DataGridView1.DataSource = дв
Вторая версия конструктора DataView представляет собой использование указанного DataTable для инициализации нового экземпляра класса DataView.
Следующий программный код демонстрирует, как использовать вторую версию конструктора DataView для создания объекта DataView для фильтрации и сортировки столбцов данных таблицы данных «Zhang Limin Studio» в наборе данных и привязки элемента управления DataGridView к этому. Просмотр данных. Мы обнаружили, что элемент управления DataGridView будет отображать только данные о сотрудниках «Информационного отдела», и данные будут упорядочены по возрастанию в соответствии с текущей зарплатой:
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' Создаем объект DataView
Dim dv As DataView = New DataView(Ds Zhang Limin Studio. Zhang Limin Studio)
'Установите порядок сортировки от высокого к меньшему в зависимости от текущей зарплаты
dv.Sort = "Текущая зарплата DESC"
'Установить условия фильтра для отображения только данных о сотрудниках "Информационного отдела"
dv.RowFilter = "Department = 'Информационный отдел'"
' Привязываем элемент управления DataGridView к DataView
Me.DataGridView1.DataSource = дв
Третья версия конструктора DataView представляет собой инициализацию нового экземпляра класса DataView с использованием указанных DataTable, RowFilter, Sort и DataViewRowState.
Следующий программный код демонстрирует, как использовать третью версию конструктора DataView для создания объекта DataView для фильтрации и сортировки столбцов данных таблицы данных «Zhang Limin Studio» в наборе данных и привязки элемента управления DataGridView к этому Просмотр данных. Мы обнаружили, что элемент управления DataGridView будет отображать только данные о сотрудниках, текущая зарплата которых превышает 49 000 юаней, и данные будут упорядочены по возрастанию в соответствии с текущей зарплатой:
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' Создаем объект DataView
Dim dv As DataView = New DataView( _
Студия Ds Чжан Лиминь, _.
«Текущая зарплата > 49000», _
"Текущая зарплата DESC", _
DataViewRowState.CurrentRows)
' Привязываем элемент управления DataGridView к DataView
Me.DataGridView1.DataSource = dv
Я хотел бы напомнить всем, что при создании DataView и изменении любого из свойств Sort, RowFilter или RowStateFilter индекс DataView будет восстановлен. Это означает, что если вы хотите добиться максимальной производительности, вам следует указать порядок сортировки или критерии фильтрации непосредственно в конструкторе при создании DataView. Если вы не укажете порядок сортировки или условия фильтрации напрямую в конструкторе при создании DataView, а вместо этого зададите свойства Sort, RowFilter или RowStateFilter объекта DataView после его создания, индекс DataView будет восстановлен. Причины. индекс должен быть создан как минимум дважды.
Использование свойства DefaultView DataTable
Свойство DefaultView объекта DataTable возвращает объект DataView, который использует DataTable в качестве таблицы исходных данных, что позволяет сортировать, фильтровать и искать столбцы данных в DataTable. Если созданный вами DataView хочет отобразить все столбцы данных в DataTable и расположить их в естественном порядке, использование свойства DefaultView DataTable будет очень простым и удобным способом создания DataView.
Для программы, экран выполнения которой показан на рисунке 1, она использует свойство DefaultView DataTable для создания DataView, чтобы все столбцы данных исходной таблицы данных могли быть отображены в элементе управления DataGrid в начале, и позволяет пользователю для передачи DataView на этапе выполнения для динамической фильтрации данных. Код программы указан ниже:
' Объявление уровня категории объекта DataView
Private dv As DataView
Private Sub DemoForm5_Load (отправитель ByVal As System.Object, _
ByVal e As System.EventArgs) Обрабатывает MyBase.Load
FillComboBoxDepartment()
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' Создать DataView
dv = Ds Zhang Limin Studio.DefaultView
' Отображение количества столбцов данных в DataView.
txtRowCount.Text = dv.Count.ToString
' Привязываем элемент управления DataGridView к DataView
Me.DataGridView1.DataSource = дв
Завершить
частную подписку FillComboBoxDepartment()
'Создаем объект команды данных (т.е. объект SqlCommand)
Dim foxCMD как новая команда SqlCommand
foxCMD.Connection = SqlConnection1
foxCMD.CommandText = "ВЫБРАТЬ ОТДЕЛЬНЫЙ отдел ИЗ dbo.Zhang Limin Studio"
'Открыть соединение
SqlConnection1.Open()
Использование myReader в качестве SqlDataReader = foxCMD.ExecuteReader()
Если myReader.HasRows Тогда
Пока myReader.Read()
ComboBoxDepartment.Items.Add(myReader.GetSqlString(0))
Конец пока
Конец, если
Завершить использование
ComboBoxDepartment.SelectedIndex = 0
Завершить
частную подписку btnFilter_Click (отправитель ByVal As System.Object, _
ByVal e As System.EventArgs) Обрабатывает btnFilter.Click
dv.RowFilter = "Отдел= '" & _
ComboBoxDepartment.SelectedItem.ToString() & "'"
'Отображать количество столбцов данных в DataView
txtRowCount.Text = dv.Count.ToString
Конец подписки
http://www.cnblogs.com/liminzhang/archive/2006/10/23/537518.html