Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка приложений баз данных (Visual Studio 2008).docx
Скачиваний:
143
Добавлен:
26.03.2016
Размер:
1.01 Mб
Скачать

Объект DataView (ado.Net) DataView - класс

Представляет настраиваемое и допускающее привязку данных представление объекта DataTable для сортировки, фильтрации, поиска, изменения и навигации.

Пространство имен:System.DataСборка:System.Data (в System.Data.dll)

Синтаксис

Язык C#

public class DataView : MarshalByValueComponent, IBindingListView,

IBindingList, IList, ICollection, IEnumerable, ITypedList,

ISupportInitializeNotification, ISupportInitialize

Основная функция класса DataView состоит в обеспечении привязки данных как к формам Windows, так и к веб-формам.

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

Для создания представления данных с установленным фильтром и сортировкой задайте свойства RowFilterиSort. Затем воспользуйтесь свойствомItem, чтобы возвратить объектDataRowView.

Кроме того, с помощью методов AddNewиDeleteможно также добавить или удалить набор строк. При этом с помощью свойстваRowStateFilterобъекту DataView можно задать отображение только удаленных или новых строк.

Примечание.

Если критерии сортировки явным образом не заданы для DataView, объекты DataRowView в DataView сортируются на основе DataRow, соответствующих DataView, в DataTable.RowsDataRowCollection.

Создание объекта DataView на основе DataTable

Объект DataViewможет быть создан на основе объектаDataTableс помощью методаAsDataView.

В следующем примере объект DataViewсоздается на основе таблицы SalesOrderDetail и становится источником данных для объектаBindingSource. Этот объект выступает в роли посредника для элемента управленияDataGridView.

C#

DataTable orders = dataSet.Tables["SalesOrderDetail"];

DataView view = orders.AsDataView();

bindingSource1.DataSource = view;

dataGridView1.AutoResizeColumns();

Фильтрацию и сортировку для объекта DataViewможно задать после его создания на основе таблицыDataTable. В следующем примере объектDataViewсоздается на основе таблицы Contact, и в свойствеSortзадается сортировка по фамилиям в возрастающем порядке, а затем по именам в убывающем порядке:

C#

DataTable contacts = dataSet.Tables["Contact"];

DataView view = contacts.AsDataView();

view.Sort = "LastName desc, FirstName asc";

bindingSource1.DataSource = view;

dataGridView1.AutoResizeColumns();

Однако задание свойств RowFilterилиSortпосле создания объектаDataViewна основе запроса приводит к потере производительности, так как объектDataViewстроит индекс для поддержки операций фильтрации и сортировки. При установке свойствRowFilterилиSortперестраивается индекс данных, что добавляет нагрузку на приложение и снижает производительность. Если возможно, лучше указать сведения о фильтрации и сортировке при создании объектаDataViewи избежать необходимости изменять его позднее.

Сортировка с помощью DataView (LINQ to DataSet)

.NET Framework 4.5

Другие версии

  • .NET Framework 4

  • Visual Studio 2008

  • .NET Framework 3.5

Эта тема еще не получила оценку - Оценить эту тему

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

Создание объекта DataView на основе запроса с данными сортировки

Объект DataViewможно создать с помощью запроса LINQ to DataSet. Если запрос содержит предложениеOrderBy,OrderByDescending,ThenByилиThenByDescending, выражения в этих предложениях используются в качестве основы для сортировки данных вDataView. Например, если запрос содержит предложения Order By…  и Then By…, в результирующем объектеDataViewданные будут упорядочены по обоим указанным столбцам.

Сортировка на основе выражений является более сложной и мощной операцией сортировки, чем более простая сортировка на основе строк. Следует иметь в виду, что сортировки на основе строк и выражений являются взаимоисключающими. Если сортировка на основе строк Sortзадается после создания объектаDataViewна основе запроса, то выводимый из запроса фильтр на основе выражений удаляется и не восстанавливается.

Индекс для DataViewформируется как при созданииDataView, так и при изменении каких-либо сведений о сортировке или фильтрации. Наилучшей производительности можно достичь, если указать критерии сортировки в запросе LINQ to DataSet, на основе которого создается объектDataView, и не менять данные сортировки позднее. Дополнительные сведения см. в разделеПроизводительность DataView.

Примечание

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

Пример

В следующем примере выполняется запрос к таблице SalesOrderHeader, а полученные строки упорядочиваются по дате заказа; на основе этого запроса создается объект DataViewи привязывается кBindingSource.

C#

VB

Копировать

DataTable orders = dataSet.Tables["SalesOrderHeader"];

EnumerableRowCollection<DataRow> query = from order in orders.AsEnumerable()

orderby order.Field<DateTime>("OrderDate")

select order;

DataView view = query.AsDataView();

bindingSource1.DataSource = view;

Пример

В следующем примере выполняется запрос к таблице SalesOrderHeader, а полученные строки упорядочиваются по общей стоимости; на основе этого запроса создается объект DataViewи привязывается кBindingSource.

C#

VB

Копировать

DataTable orders = dataSet.Tables["SalesOrderHeader"];

EnumerableRowCollection<DataRow> query =

from order in orders.AsEnumerable()

orderby order.Field<decimal>("TotalDue")

select order;

DataView view = query.AsDataView();

bindingSource1.DataSource = view;

Пример

В следующем примере выполняется запрос к таблице SalesOrderDetail, а полученные строки упорядочиваются по объему заказа, а затем по идентификатору заказа на продажу; на основе этого запроса создается объект DataViewи привязывается кBindingSource.

C#

VB

Копировать

DataTable orders = dataSet.Tables["SalesOrderDetail"];

EnumerableRowCollection<DataRow> query = from order in orders.AsEnumerable()

orderby order.Field<Int16>("OrderQty"), order.Field<int>("SalesOrderID")

select order;

DataView view = query.AsDataView();

bindingSource1.DataSource = view;

Использование свойства сортировки на основе строк

Сортировка объекта DataViewна основе строк также работает и с запросом LINQ to DataSet. После создания объектаDataViewна основе запроса LINQ to DataSet можно использовать свойствоSortдля задания сортировки в объектеDataView.

Возможности сортировки на основе строк и выражений являются взаимоисключающими. При задании свойства Sortсортировка на основе выражений, унаследованная из запроса, на основе которого был создан объектDataView, удаляется.

Дополнительные сведения о фильтрации Sortна основе строк см. в разделеСортировка и фильтрация данных.

Пример

В следующем примере объект DataViewсоздается на основе таблицы Contact, затем выполняется сортировка по фамилиям в возрастающем порядке, а затем по именам в убывающем порядке:

C#

VB

Копировать

DataTable contacts = dataSet.Tables["Contact"];

DataView view = contacts.AsDataView();

view.Sort = "LastName desc, FirstName asc";

bindingSource1.DataSource = view;

dataGridView1.AutoResizeColumns();

Пример

В следующем примере выполняется запрос к таблице Contact, который должен вернуть фамилии, начинающиеся на букву «S». На основе этого запроса создается объект DataViewи привязывается к объектуBindingSource.

C#

VB

Копировать

DataTable contacts = dataSet.Tables["Contact"];

EnumerableRowCollection<DataRow> query = from contact in contacts.AsEnumerable()

where contact.Field<string>("LastName").StartsWith("S")

select contact;

DataView view = query.AsDataView();

bindingSource1.DataSource = view;

view.Sort = "LastName desc, FirstName asc";

Очистка сортировки

Данные сортировки для объекта DataViewможно очистить после их задания с помощью свойстваSort. Существует два способа очистки данных сортировкиDataView.

  • Установите свойство Sortв значение null.

  • Установите свойство Sortравным пустой строке.

Пример

В следующем примере объект DataViewсоздается на основе запроса и данные сортировки очищаются путем установки для свойстваSortзначения, равного пустой строке:

C#

VB

Копировать

DataTable orders = dataSet.Tables["SalesOrderHeader"];

EnumerableRowCollection<DataRow> query = from order in orders.AsEnumerable()

orderby order.Field<decimal>("TotalDue")

select order;

DataView view = query.AsDataView();

bindingSource1.DataSource = view;

view.Sort = "";

Пример

В следующем примере объект DataViewсоздается на основе таблицы Contact и в свойствеSortзадается сортировка по фамилиям в убывающем порядке. Затем данные сортировки очищаются путем установки для свойстваSortзначения null:

C#

VB

Копировать

DataTable contacts = dataSet.Tables["Contact"];

DataView view = contacts.AsDataView();

view.Sort = "LastName desc";

bindingSource1.DataSource = view;

dataGridView1.AutoResizeColumns();

// Clear the sort.

view.Sort = null;

См. также

Основные понятия

Связывание с данными и LINQ to DataSet

Фильтрация с помощью DataView (LINQ to DataSet)

Сортировка с помощью DataView (LINQ to DataSet)