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

Запрос к коллекции DataRowView в DataView

Представление DataViewобеспечивает доступ к перечисляемой коллекции объектовDataRowView. ОбъектDataRowViewпредоставляет пользовательское представление объектаDataRowи отображает конкретную версию этого объектаDataRowв элементе управления. В элементе управления, напримерDataGridView, можно отобразить только одну версию объектаDataRow. Доступ к объектуDataRow, представляемому объектомDataRowView, можно получить через свойствоRowобъектаDataRowView. При просмотре значений с помощью объектаDataRowViewсвойствоRowStateFilterопределяет, какая версия строки базового объектаDataRowотображается. Дополнительные сведения о доступе к различным версиям строк с помощью объектаDataRowсм. в разделеСостояния и версии строк. Поскольку коллекция объектовDataRowView, представляемыхDataView, является перечислимой, для запросов к ней можно использовать LINQ to DataSet.

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

C#

DataTable products = dataSet.Tables["Product"];

// Query for red colored products.

EnumerableRowCollection<DataRow> redProductsQuery =

from product in products.AsEnumerable()

where product.Field<string>("Color") == "Red"

orderby product.Field<decimal>("ListPrice")

select product;

// Create a table and view from the query.

DataTable redProducts = redProductsQuery.CopyToDataTable<DataRow>();

DataView view = new DataView(redProducts);

// Mark a row as deleted.

redProducts.Rows[0].Delete();

// Modify product price.

redProducts.Rows[1]["ListPrice"] = 20.00;

redProducts.Rows[2]["ListPrice"] = 30.00;

view.RowStateFilter = DataViewRowState.ModifiedCurrent | DataViewRowState.Deleted;

// Query for the modified and deleted rows.

IEnumerable<DataRowView> modifiedDeletedQuery = from DataRowView rowView in view

select rowView;

dataGridView2.DataSource = modifiedDeletedQuery.ToList();

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

C#

// Create a table from the bound view representing a query of

// available products.

DataView view = (DataView)bindingSource1.DataSource;

DataTable productsTable = (DataTable)view.Table;

// Set RowStateFilter to display the current rows.

view.RowStateFilter = DataViewRowState.CurrentRows ;

// Query the DataView for red colored products ordered by list price.

var productQuery = from DataRowView rowView in view

where rowView.Row.Field<string>("Color") == "Red"

orderby rowView.Row.Field<decimal>("ListPrice")

select new { Name = rowView.Row.Field<string>("Name"),

Color = rowView.Row.Field<string>("Color"),

Price = rowView.Row.Field<decimal>("ListPrice")};

// Bind the query results to another DataGridView.

dataGridView2.DataSource = productQuery.ToList();