Share via


Abfragen der DataRowView-Auflistung in einer DataView

Das DataView-Objekt macht eine aufzählbare Auflistung von DataRowView-Objekten verfügbar. DataRowView stellt eine angepasste Ansicht eines DataRow-Objekts dar und zeigt eine spezielle Version dieses DataRow-Objekts in einem Steuerelement an. Nur eine Version einer DataRow kann durch ein Steuerelement, wie z. B. DataGridView, angezeigt werden. Sie können auf die DataRow zugreifen, die von der DataRowView durch die Row-Eigenschaft der DataRowView bereitgestellt wird. Beim Anzeigen von Werten mit einer DataRowView legt die RowStateFilter-Eigenschaft fest, welche Zeilenversion der zugrunde liegenden DataRow verfügbar gemacht wird. Informationen zum Zugriff auf verschiedene Zeilenversionen mithilfe von DataRow finden Sie unter Zeilenstatus und Zeilenversionen. Da die Auflistung der durch DataView bereitgestellten DataRowView-Objekte aufzählbar ist, können Sie Abfragen dafür mit LINQ to DataSet durchführen.

Im folgenden Beispiel wird die Product-Tabelle auf rotfarbige Produkte abgefragt und eine Tabelle aus der Abfrage erstellt. Eine DataView wird von der Tabelle erstellt, und die RowStateFilter-Eigenschaft wird auf die Filterung gelöschter und geänderter Zeilen festgelegt. Die DataView wird anschließend als Quelle einer LINQ-Abfrage verwendet, und die geänderten und gelöschten DataRowView-Objekte werden an ein DataGridView-Steuerelement gebunden.

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()

Im folgenden Beispiel wird eine Tabelle von Produkten aus einer Ansicht erstellt, die an ein DataGridView-Steuerelement gebunden wird. Die DataView wird auf rotfarbige Produkte abgefragt, und die geordneten Ergebnisse werden an ein DataGridView-Steuerelement gebunden.

// 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()

Weitere Informationen