Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


Wykonywanie zapytania do kolekcji DataRowView w widoku danych

Obiekt DataView uwidacznia wyliczenie kolekcji DataRowView obiektów. DataRowView reprezentuje dostosowany widok elementu DataRow i wyświetla określoną wersję DataRow elementu w kontrolce. Tylko jedna wersja elementu DataRow może być wyświetlana za pomocą kontrolki, takiej jak DataGridView. Dostęp do DataRow obiektu uwidocznionego przez DataRowView Row właściwość DataRowView. Podczas wyświetlania wartości przy użyciu DataRowViewelementu właściwość określa, RowStateFilter która wersja wiersza bazowego DataRow jest uwidoczniona. Aby uzyskać informacje na temat uzyskiwania dostępu do różnych wersji wierszy przy użyciu elementu DataRow, zobacz Stany wierszy i Wersje wierszy. Ponieważ kolekcja DataRowView obiektów uwidocznionych przez DataView obiekt jest wyliczana, możesz użyć linQ to DataSet, aby wykonać względem niego zapytanie.

Poniższy przykład wykonuje zapytanie Product dotyczące tabeli dla produktów w kolorze czerwonym i tworzy tabelę na podstawie tego zapytania. Element A DataView jest tworzony na podstawie tabeli, a RowStateFilter właściwość jest ustawiona na filtrowanie usuniętych i zmodyfikowanych wierszy. Element DataView jest następnie używany jako źródło w zapytaniu LINQ, a DataRowView obiekty, które zostały zmodyfikowane i usunięte, są powiązane z kontrolką 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();
var 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();

Poniższy przykład tworzy tabelę produktów z widoku powiązanego z kontrolką DataGridView . Zapytanie DataView dotyczy produktów w kolorze czerwonym, a uporządkowane wyniki są powiązane z kontrolką DataGridView .

C#
// Create a table from the bound view representing a query of
// available products.
var view = (DataView)bindingSource1.DataSource;
DataTable productsTable = 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();

Zobacz też