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

Использование свойства RowFilter в контексте linq to DataSet

Существующая функция DataViewфильтрации на основе строк также работает и в контексте LINQ to DataSet. Дополнительные сведения о фильтрацииRowFilterна основе строк см. в разделеСортировка и фильтрация данных (ADO.NET).

В следующем примере объект DataViewсоздается на основе таблицы Contact, а затем устанавливается свойствоRowFilterдля возврата строк, содержащих контакты с фамилией «Zhu».

C#

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

DataView view = contacts.AsDataView();

view.RowFilter = "LastName='Zhu'";

bindingSource1.DataSource = view;

dataGridView1.AutoResizeColumns();

После создания объекта DataViewна основе таблицыDataTableили запроса LINQ to DataSet можно с помощью свойстваRowFilterуказать подмножество строк на основе значений их столбцов. Фильтры на основе строк и выражений взаимно исключают друг друга. При задании свойстваRowFilterкритерий фильтра, созданный на основе запроса LINQ to DataSet, очищается и не восстанавливается.

C#

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

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

where contact.Field<string>("LastName") == "Hernandez"

select contact;

DataView view = query.AsDataView();

bindingSource1.DataSource = view;

dataGridView1.AutoResizeColumns();

view.RowFilter = "LastName='Zhu'";

Чтобы вернуть результаты определенного запроса к данным в противоположность динамическому представлению подмножества данным, можно воспользоваться методами FindилиFindRowsклассаDataViewвместо установки свойстваRowFilter. СвойствоRowFilterиспользуется наилучшим образом в приложении, связываемом с данными, где элемент связывания отображает отфильтрованные результаты. При установке свойстваRowFilterперестраивается индекс данных, что добавляет нагрузку на приложение и снижает производительность. МетодыFindиFindRowsиспользуют текущий индекс, не требуя его перестроения. ЕслиFindилиFindRowsпланируется вызвать только один раз, следует использовать существующий объектDataView. Если методыFindилиFindRowsпланируется вызывать несколько раз, следует создать новый объектDataViewдля перестроения индекса столбца, в котором необходимо выполнить поиск, а затем вызвать методыFindилиFindRows. Дополнительные сведения о методахFindиFindRowsсм. в разделахПоиск строк (ADO.NET)иПроизводительность DataView.

Очистка фильтра

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

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

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

Пример

В следующем примере объект DataViewсоздается на основе запроса, а затем фильтр очищается путем установки для свойстваRowFilterзначения null.

C#

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

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

where order.Field<DateTime>("OrderDate") > new DateTime(2002, 11, 20) && order.Field<Decimal>("TotalDue") < new Decimal(60.00)

select order;

DataView view = query.AsDataView();

bindingSource1.DataSource = view;

view.RowFilter = null;

Пример

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

C#

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

DataView view = contacts.AsDataView();

view.RowFilter = "LastName='Zhu'";

bindingSource1.DataSource = view;

dataGridView1.AutoResizeColumns();

// Clear the row filter.

view.RowFilter = "";

См. также

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

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

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