Sdílet prostřednictvím


Dotazování na kolekci DataRowView v zobrazení dat

Zveřejňuje DataView výčtovou kolekci DataRowView objektů. DataRowView představuje přizpůsobené zobrazení ovládacího DataRow prvku a zobrazuje konkrétní verzi DataRow ovládacího prvku. DataRow Pomocí ovládacího prvku, jako DataGridViewje například . Přístup k DataRow té, která je vystavena DataRowView prostřednictvím Row vlastnosti DataRowView. Při zobrazení hodnot pomocí DataRowView, RowStateFilter vlastnost určuje, který řádek verze podkladového podkladu DataRow je vystaven. Informace o přístupu k různým verzím řádků pomocí DataRowřady naleznete v tématu Stavy řádků a Verze řádků. Vzhledem k tomu, že kolekce DataRowView objektů vystavených objekty DataView je výčet, můžete k dotazování použít LINQ to DataSet.

Následující příklad dotazuje Product tabulku na červeně barevné produkty a vytvoří z tohoto dotazu tabulku. Vytvoří DataView se z tabulky a RowStateFilter vlastnost se nastaví tak, aby filtrovaly odstraněné a upravené řádky. Poté DataView se použije jako zdroj v dotazu LINQ a DataRowView objekty, které byly změněny a odstraněny, jsou vázány na DataGridView ovládací prvek.

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();
Dim products As DataTable = dataSet.Tables("Product")

' Query for red colored products.
Dim redProductsQuery = _
From product In products.AsEnumerable() _
Where product.Field(Of String)("Color") = "Red" _
Order By product.Field(Of Decimal)("ListPrice") _
Select product
' Create a table and view from the query.
Dim redProducts As DataTable = redProductsQuery.CopyToDataTable()
Dim view As DataView = New DataView(redProducts)

' Mark a row as deleted.
redProducts.Rows(0).Delete()

' Modify product price.
redProducts.Rows(1)("ListPrice") = 20.0
redProducts.Rows(2)("ListPrice") = 30.0

view.RowStateFilter = DataViewRowState.ModifiedCurrent Or DataViewRowState.Deleted

' Query for the modified and deleted rows.
Dim modifiedDeletedQuery = From rowView As DataRowView In view _
                           Select rowView

dataGridView2.DataSource = modifiedDeletedQuery.ToList()

Následující příklad vytvoří tabulku produktů ze zobrazení vázaného DataGridView na ovládací prvek. Dotazuje DataView se na červeně barevné produkty a seřazené výsledky jsou vázány na DataGridView ovládací prvek.

// 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();
' Create a table from the bound view representing a query of
' available products.
Dim view As DataView = CType(bindingSource1.DataSource, DataView)
Dim productsTable As DataTable = CType(view.Table, DataTable)

' Set RowStateFilter to display the current rows.
view.RowStateFilter = DataViewRowState.CurrentRows

' Query the DataView for red colored products ordered by list price.
Dim productQuery = From rowView As DataRowView In view _
                   Where rowView.Row.Field(Of String)("Color") = "Red" _
                   Order By rowView.Row.Field(Of Decimal)("ListPrice") _
                   Select New With {.Name = rowView.Row.Field(Of String)("Name"), _
                                .Color = rowView.Row.Field(Of String)("Color"), _
                                .Price = rowView.Row.Field(Of Decimal)("ListPrice")}

' Bind the query results to another DataGridView.
dataGridView2.DataSource = productQuery.ToList()

Viz také