Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Möglichkeit zum Sortieren von Daten anhand bestimmter Kriterien und anschließendes Darstellen der Daten an einen Client über ein UI-Steuerelement ist ein wichtiger Aspekt der Datenbindung. DataView bietet verschiedene Möglichkeiten zum Sortieren und Zurückgeben von Datenzeilen, die nach bestimmten Sortierkriterien sortiert sind. Zusätzlich zu den zeichenfolgenbasierten Sortierfunktionen DataView können Sie auch Language-Integrated Abfrageausdrücke (LINQ) für die Sortierkriterien verwenden. LINQ-Ausdrücke ermöglichen viel komplexere und leistungsfähigere Sortiervorgänge als Zeichenfolgenbasierte Sortierung. In diesem Thema werden beide Vorgehensweisen der Sortierung mithilfe von DataView beschrieben.
Erstellen von DataView aus einer Abfrage mit Sortierinformationen
Ein DataView Objekt kann aus einer LINQ to DataSet-Abfrage erstellt werden. Wenn diese Abfrage eine Klausel mit OrderBy, OrderByDescending, ThenBy oder ThenByDescending enthält, werden die Ausdrücke in diesen Klauseln als Grundlage für die Sortierung der Daten im DataView verwendet. Wenn die Abfrage beispielsweise die Order By…Und-Klauseln Then By… enthält, würde das Ergebnis DataView die Daten nach beiden angegebenen Spalten sortieren.
Die ausdrucksbasierte Sortierung bietet eine leistungsfähigere und komplexere Sortierung als die einfachere Zeichenfolgenbasierte Sortierung. Beachten Sie, dass die zeichenfolgenbasierte und ausdrucksbasierte Sortierung sich gegenseitig ausschließen. Wenn die zeichenfolgenbasierte Sort festgelegt wird, nachdem eine DataView aus einer Abfrage erstellt wurde, wird der ausdrucksbasierte Filter, der aus der Abfrage abgeleitet wird, gelöscht und kann nicht zurückgesetzt werden.
Der Index für einen DataView wird sowohl beim DataView Erstellen als auch beim Ändern der Sortier- oder Filterinformationen erstellt. Sie erzielen die beste Leistung, indem Sie Sortierkriterien in der LINQ to DataSet-Abfrage bereitstellen, aus der das DataView erstellt wird, und diese Kriterien später nicht ändern. Weitere Informationen finden Sie unter DataView Performance.
Hinweis
In den meisten Fällen sollten die für die Sortierung verwendeten Ausdrücke keine Nebenwirkungen haben und deterministisch sein. Außerdem sollten die Ausdrücke keine Logik enthalten, die von einer festgelegten Anzahl von Ausführungen abhängt, da die Sortiervorgänge beliebig oft ausgeführt werden können.
Beispiel
Im folgenden Beispiel werden die Tabelle "SalesOrderHeader" abgefragt und die zurückgegebenen Zeilen nach dem Bestelldatum sortiert. erstellt eine DataView aus dieser Abfrage; und bindet die DataView an eine BindingSource.
DataTable orders = _dataSet.Tables["SalesOrderHeader"];
EnumerableRowCollection<DataRow> query = from order in orders.AsEnumerable()
orderby order.Field<DateTime>("OrderDate")
select order;
DataView view = query.AsDataView();
bindingSource1.DataSource = view;
Dim orders As DataTable = dataSet.Tables("SalesOrderHeader")
Dim query = _
From order In orders.AsEnumerable() _
Order By order.Field(Of DateTime)("OrderDate") _
Select order
Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view
Beispiel
Im folgenden Beispiel wird die Tabelle "SalesOrderHeader" abgefragt und die zurückgegebenen Zeilen nach dem fälligen Gesamtbetrag sortiert; es wird ein DataView aus dieser Abfrage erstellt und DataView an ein BindingSource gebunden.
DataTable orders = _dataSet.Tables["SalesOrderHeader"];
EnumerableRowCollection<DataRow> query =
from order in orders.AsEnumerable()
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() _
Order By order.Field(Of Decimal)("TotalDue") _
Select order
Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view
Beispiel
Im folgenden Beispiel werden die Tabelle "SalesOrderDetail" abgefragt und die zurückgegebenen Zeilen nach Bestellmenge und dann nach Verkaufsauftrags-ID sortiert. erstellt eine DataView aus dieser Abfrage; und bindet die DataView an eine BindingSource.
DataTable orders = _dataSet.Tables["SalesOrderDetail"];
EnumerableRowCollection<DataRow> query = from order in orders.AsEnumerable()
orderby order.Field<short>("OrderQty"), order.Field<int>("SalesOrderID")
select order;
DataView view = query.AsDataView();
bindingSource1.DataSource = view;
Dim orders As DataTable = dataSet.Tables("SalesOrderDetail")
Dim query = _
From order In orders.AsEnumerable() _
Order By order.Field(Of Int16)("OrderQty"), order.Field(Of Integer)("SalesOrderID") _
Select order
Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view
Verwenden der Eigenschaft für die zeichenfolgenbasierte Sortierung
Die zeichenfolgenbasierte Sortierfunktion funktioniert DataView weiterhin mit LINQ to DataSet. Nachdem ein Objekt DataView aus einer LINQ to DataSet-Abfrage erstellt wurde, können Sie die Sort Eigenschaft verwenden, um die Sortierung für das Objekt DataViewfestzulegen.
Die zeichenfolgenbasierte und ausdrucksbasierte Sortierfunktion schließen sich gegenseitig aus. Durch Festlegen der Sort Eigenschaft wird die ausdrucksbasierte Sortierung gelöscht, die von der Abfrage geerbt wurde, von der die DataView Eigenschaft erstellt wurde.
Weitere Informationen zur Zeichenfolgenbasierten Sort Filterung finden Sie unter Sortieren und Filtern von Daten.
Beispiel
Im folgenden Beispiel wird eine DataView aus der Tabelle "Kontakt" erstellt und die Zeilen nach Nachname in absteigender Reihenfolge und dann vorname in aufsteigender Reihenfolge sortiert:
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()
Beispiel
Im folgenden Beispiel wird die Kontakttabelle nach Nachnamen gesucht, die mit dem Buchstaben "S" beginnen. A DataView wird aus dieser Abfrage erstellt und an ein BindingSource Objekt gebunden.
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"
Löschen der Sortierinformationen
Die Sortierinformationen für ein Objekt DataView können gelöscht werden, nachdem sie mithilfe der Sort Eigenschaft festgelegt wurde. Es gibt zwei Möglichkeiten, die Sortierinformationen zu löschen in DataView:
Legen Sie die Sort-Eigenschaft auf
nullfest.Legen Sie die Sort Eigenschaft auf eine leere Zeichenfolge fest.
Beispiel
Im folgenden Beispiel wird eine DataView Aus einer Abfrage erstellt und die Sortierung gelöscht, indem die Sort Eigenschaft auf eine leere Zeichenfolge festgelegt wird:
DataTable orders = _dataSet.Tables["SalesOrderHeader"];
EnumerableRowCollection<DataRow> query = from order in orders.AsEnumerable()
orderby order.Field<decimal>("TotalDue")
select order;
DataView view = query.AsDataView();
bindingSource1.DataSource = view;
view.Sort = "";
Dim orders As DataTable = dataSet.Tables("SalesOrderHeader")
Dim query = _
From order In orders.AsEnumerable() _
Order By order.Field(Of Decimal)("TotalDue") _
Select order
Dim view As DataView = query.AsDataView()
bindingSource1.DataSource = view
view.Sort = ""
Beispiel
Im folgenden Beispiel wird eine DataView auf der Grundlage der Contact-Tabelle erstellt und dann die Sort-Eigenschaft so eingerichtet, dass die Ergebnisse in absteigender Reihenfolge nach dem Nachnamen sortiert werden. Die Sortierinformationen werden dann gelöscht, indem die Sort-Eigenschaft auf null gesetzt wird.
DataTable contacts = _dataSet.Tables["Contact"];
DataView view = contacts.AsDataView();
view.Sort = "LastName desc";
bindingSource1.DataSource = view;
dataGridView1.AutoResizeColumns();
// Clear the sort.
view.Sort = null;
Dim contacts As DataTable = dataSet.Tables("Contact")
Dim view As DataView = contacts.AsDataView()
view.Sort = "LastName desc"
bindingSource1.DataSource = view
dataGridView1.AutoResizeColumns()
'Clear the sort.
view.Sort = Nothing