Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Existují dva způsoby, jak vytvořit DataView v kontextu LINQ to DataSet. Můžete vytvořit DataView z dotazu LINQ to DataSet nad DataTable, nebo ho můžete vytvořit z typovaného nebo netypovaného DataTable. V obou případech vytvoříte DataView pomocí jedné z metod rozšíření AsDataView; DataView není přímo konstruktovatelný v kontextu LINQ to DataSet.
DataView Po vytvoření můžete vytvořit vazbu na ovládací prvek uživatelského rozhraní v aplikaci Windows Forms nebo v aplikaci ASP.NET nebo změnit nastavení filtrování a řazení.
DataView vytvoří index, který výrazně zvyšuje výkon operací, které mohou používat index, jako je filtrování a řazení. Index pro DataView se sestaví jak při vytvoření DataView, tak při úpravě některé z informací o řazení nebo filtrování. DataView Vytvoření a následné nastavení informací o řazení nebo filtrování později způsobí, že se index sestaví alespoň dvakrát: jednou po DataView vytvoření a znovu při úpravě některé vlastnosti řazení nebo filtru.
Další informace o filtrování a řazení pomocí DataView, naleznete v tématu Filtrování pomocí DataView a řazení pomocí DataView.
Vytvoření zobrazení dat z dotazu LINQ to DataSet
Objekt DataView lze vytvořit z výsledků dotazu LINQ to DataSet, kde jsou výsledky projekce DataRow objektů. Nově vytvořený DataView zdědí informace o filtrování a řazení z dotazu, ze které se vytvoří.
Poznámka:
Ve většině případů by výrazy použité pro filtrování a řazení neměly mít vedlejší účinky a musí být deterministické. Výrazy by také neměly obsahovat žádnou logiku, která závisí na nastaveném počtu spuštění, protože operace řazení a filtrování se můžou spouštět kolikrát.
Vytvoření DataView z dotazu, který vrací anonymní typy, nebo z dotazů provádějících operace spojení, není podporováno.
V dotazu použitém k vytvoření DataViewse podporují pouze následující operátory dotazu:
Všimněte si, že když je DataView vytvořen z dotazu LINQ to DataSet, metoda Select musí být tou poslední volanou metodou v dotazu. Toto je ukázáno v následujícím příkladu, který vytvoří DataView online objednávek seřazených podle celkové dlužné částky.
DataTable orders = _dataSet.Tables["SalesOrderHeader"];
EnumerableRowCollection<DataRow> query =
from order in orders.AsEnumerable()
where order.Field<bool>("OnlineOrderFlag")
orderby order.Field<decimal>("TotalDue")
select order;
DataView view = query.AsDataView();
bindingSource1.DataSource = view;
Dim orders As DataTable = dataSet.Tables("SalesOrderHeader")
Dim query = _
From order In orders.AsEnumerable() _
Where order.Field(Of Boolean)("OnlineOrderFlag") = True _
Order By order.Field(Of Decimal)("TotalDue") _
Select order
Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view
Pomocí vlastností řetězců RowFilter a Sort můžete také filtrovat a řadit DataView po jeho vytvoření z dotazu. Všimněte si, že tím vymažete informace o řazení a filtrování zděděné z dotazu. Následující příklad vytvoří DataView z dotazu LINQ to DataSet, který filtruje podle příjmení začínajících písmenem S. Vlastnost založená na Sort řetězci je nastavena tak, aby seřadil příjmení ve vzestupném pořadí a potom křestní jména v sestupném pořadí:
DataTable contacts = _dataSet.Tables["Contact"];
EnumerableRowCollection<DataRow> query = from contact in contacts.AsEnumerable()
where contact.Field<string>("LastName").StartsWith("S")
select contact;
DataView view = query.AsDataView();
bindingSource1.DataSource = view;
view.Sort = "LastName desc, FirstName asc";
Dim contacts As DataTable = dataSet.Tables("Contact")
Dim query = _
From contact In contacts.AsEnumerable() _
Where contact.Field(Of String)("LastName").StartsWith("S") _
Select contact
Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view
view.Sort = "LastName desc, FirstName asc"
Vytvoření zobrazení dat z datové tabulky
Kromě toho, že je objekt vytvořen z dotazu pomocí LINQ to DataSet, může být objekt vytvořen z DataView použitím metody DataTable.
Následující příklad vytvoří DataView z SalesOrderDetail tabulky a nastaví ji jako zdroj dat objektu BindingSource . Tento objekt funguje jako proxy pro DataGridView ovládací prvek.
DataTable orders = _dataSet.Tables["SalesOrderDetail"];
DataView view = orders.AsDataView();
bindingSource1.DataSource = view;
dataGridView1.AutoResizeColumns();
Dim orders As DataTable = dataSet.Tables("SalesOrderDetail")
Dim view As DataView = orders.AsDataView()
bindingSource1.DataSource = view
dataGridView1.AutoResizeColumns()
Filtrování a řazení lze nastavit na DataView poté, co byl vytvořen z DataTable. Následující příklad vytvoří DataView z tabulky Kontakt a nastaví vlastnost Sort k řazení podle příjmení ve vzestupném pořadí a pak podle křestních jmen v sestupném pořadí.
DataTable contacts = _dataSet.Tables["Contact"];
DataView view = contacts.AsDataView();
view.Sort = "LastName desc, FirstName asc";
bindingSource1.DataSource = view;
dataGridView1.AutoResizeColumns();
Dim contacts As DataTable = dataSet.Tables("Contact")
Dim view As DataView = contacts.AsDataView()
view.Sort = "LastName desc, FirstName asc"
bindingSource1.DataSource = view
dataGridView1.AutoResizeColumns()
Dojde však ke ztrátě výkonu, která nastane při nastavení vlastnosti RowFilter nebo Sort poté, co byl DataView vytvořen z dotazu, protože DataView vytváří index pro podporu operací filtrování a řazení. Nastavení vlastnosti RowFilter nebo Sort znovu sestaví index dat, přináší režii vaší aplikaci a snižuje výkon. Pokud je to možné, je lepší určit informace o filtrování a řazení při prvním vytvoření DataView a vyhnout se jejich následné úpravě.