Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Er zijn twee manieren om een DataView in de LINQ naar DataSet-context te maken. U kunt een DataView maken van een LINQ-query naar een DataSet over een DataTable, of u kunt er een maken op basis van een getypte of niet-getypte DataTable. In beide gevallen creëert u de DataView door gebruik te maken van een van de AsDataView extensiemethoden; DataView kan niet rechtstreeks worden gecreëerd in de LINQ-naar-DataSet-context.
Nadat de toepassing DataView is gemaakt, kunt u het verbinden met een ui-besturingselement in een Windows-formuliertoepassing of een ASP.NET toepassing, of de filter- en sorteerinstellingen wijzigen.
DataView maakt een index, waardoor de prestaties van bewerkingen die de index kunnen gebruiken aanzienlijk worden verhoogd, zoals filteren en sorteren. De index voor een DataView wordt gemaakt, zowel wanneer de DataView gegevens worden gemaakt als wanneer een van de sorteer- of filtergegevens wordt gewijzigd. Het maken van een DataView en vervolgens het instellen van de sorteer- of filtergegevens zorgt ervoor dat de index ten minste twee keer wordt gebouwd: eenmaal wanneer de DataView wordt gemaakt en opnieuw wanneer een van de sorteer- of filtereigenschappen wordt gewijzigd.
Zie DataView en Sorteren met DataView voor meer informatie over filteren en sorteren met DataView.
DataView maken van een LINQ naar DataSet-query
Een DataView object kan worden gemaakt op basis van de resultaten van een LINQ naar DataSet-query, waarbij de resultaten een projectie van DataRow objecten zijn. De zojuist gemaakte DataView erft de filter- en sorteerinformatie van de query waaruit het is gemaakt.
Opmerking
In de meeste gevallen mogen de expressies die worden gebruikt voor filteren en sorteren, geen bijwerkingen hebben en moeten ze deterministisch zijn. De expressies mogen ook geen logica bevatten die afhankelijk is van een vast aantal uitvoeringen, omdat de sorteer- en filterbewerkingen een willekeurig aantal keren kunnen worden uitgevoerd.
Het maken van een DataView op basis van een query die anonieme typen retourneert of query's die join-operaties uitvoeren, wordt niet ondersteund.
Alleen de volgende queryoperators worden ondersteund in een query die wordt gebruikt om te maken DataView:
Houd er rekening mee dat wanneer een DataView van een LINQ naar DataSet-query wordt gemaakt, de Select methode de laatste methode moet zijn die in de query wordt aangeroepen. Dit wordt weergegeven in het volgende voorbeeld, waarmee een DataView aantal onlineorders wordt gemaakt, gesorteerd op totaal verschuldigd:
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
U kunt ook de op tekenreeksen gebaseerde RowFilter eigenschappen Sort gebruiken om een DataView tekenreeks te filteren en te sorteren nadat deze is gemaakt op basis van een query. Houd er rekening mee dat hiermee de sorteer- en filtergegevens worden gewist die zijn overgenomen van de query. In het volgende voorbeeld wordt een DataView van een LINQ naar DataSet-query gemaakt die filtert op achternamen die beginnen met 'S'. De eigenschap op basis van Sort tekenreeksen wordt ingesteld om te sorteren op achternamen in oplopende volgorde en vervolgens op voornamen in aflopende volgorde:
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"
Een DataView maken op basis van een gegevenstabel
Naast het maken van een LINQ naar DataSet-query, kan een DataView object worden gemaakt op basis van een DataTable met behulp van de AsDataView methode.
In het volgende voorbeeld wordt een DataView object vanuit de tabel SalesOrderDetail gemaakt en ingesteld als de gegevensbron van een BindingSource object. Dit object fungeert als proxy voor een DataGridView controle.
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()
Filteren en sorteren kunnen worden ingesteld voor de DataView nadat deze is aangemaakt vanuit een DataTable. In het volgende voorbeeld wordt een DataView aangemaakt uit de tabel Contactpersoon en wordt de Sort-eigenschap ingesteld zodat er op achternamen in oplopende volgorde en vervolgens voornamen in aflopende volgorde wordt gesorteerd.
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()
Er is echter sprake van prestatieverlies bij het instellen van de RowFilter of Sort eigenschap nadat de DataView query is gemaakt, omdat DataView er een index wordt samengesteld ter ondersteuning van filter- en sorteerbewerkingen. Door de eigenschap RowFilter of Sort in te stellen, wordt de index voor de gegevens opnieuw opgebouwd, wat overhead toevoegt aan uw toepassing en de prestaties vermindert. Indien mogelijk is het beter om de filter- en sorteergegevens op te geven wanneer u de DataView gegevens voor het eerst maakt en deze daarna niet wijzigt.