Udostępnij za pośrednictwem


Sortowanie za pomocą elementu DataView (LINQ to DataSet)

Możliwość sortowania danych na podstawie określonych kryteriów, a następnie prezentowania danych klientowi za pomocą kontrolki interfejsu użytkownika jest ważnym aspektem powiązania danych. DataView Udostępnia kilka sposobów sortowania danych i zwracania wierszy danych uporządkowanych według określonych kryteriów porządkowania. Oprócz możliwości sortowania opartego na ciągach DataView umożliwia również używanie wyrażeń zapytań zintegrowanych z językiem (LINQ) dla kryteriów sortowania. Wyrażenia LINQ umożliwiają znacznie bardziej złożone i zaawansowane operacje sortowania niż sortowanie oparte na ciągach. W tym temacie opisano oba podejścia do sortowania przy użyciu polecenia DataView.

Tworzenie elementu DataView na podstawie zapytania z informacjami sortowania

Obiekt DataView można utworzyć na podstawie zapytania LINQ to DataSet. Jeśli to zapytanie zawiera klauzulę OrderBy, OrderByDescending, ThenBylub ThenByDescending , wyrażenia w tych klauzulach są używane jako podstawa sortowania danych w obiekcie DataView. Jeśli na przykład zapytanie zawiera Order By…klauzule i Then By… , wynikowe DataView będzie porządkować dane według obu określonych kolumn.

Sortowanie oparte na wyrażeniach oferuje bardziej zaawansowane i złożone sortowanie niż prostsze sortowanie oparte na ciągach. Należy pamiętać, że sortowanie oparte na ciągach i wyrażeniach wzajemnie się wykluczają. Jeśli wartość oparta na Sort ciągu jest ustawiona po DataView utworzeniu elementu na podstawie zapytania, filtr oparty na wyrażeniach wywnioskowany z zapytania jest czyszczone i nie można go zresetować.

Indeks dla elementu DataView jest tworzony zarówno podczas DataView tworzenia, jak i gdy dowolny z informacji sortowania lub filtrowania jest modyfikowany. Najlepszą wydajność można uzyskać, podając kryteria sortowania w zapytaniu LINQ to DataSet utworzonym DataView na podstawie i nie modyfikując później informacji sortowania. Aby uzyskać więcej informacji, zobacz DataView Performance (Wydajność widoku danych).

Uwaga

W większości przypadków wyrażenia używane do sortowania nie powinny mieć skutków ubocznych i muszą być deterministyczne. Ponadto wyrażenia nie powinny zawierać żadnej logiki, która zależy od określonej liczby wykonań, ponieważ operacje sortowania mogą być wykonywane dowolną liczbę razy.

Przykład

Poniższy przykład wykonuje zapytanie do tabeli SalesOrderHeader i zamawia zwrócone wiersze według daty zamówienia; tworzy element DataView na podstawie tego zapytania i wiąże element z DataView elementem 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

Przykład

Poniższy przykład wykonuje zapytanie do tabeli SalesOrderHeader i zamawia zwrócony wiersz o łączną kwotę należności; tworzy element DataView na podstawie tego zapytania i wiąże element z DataView elementem BindingSource.

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

Przykład

Poniższy przykład wykonuje zapytanie do tabeli SalesOrderDetail i zamawia zwrócone wiersze według ilości zamówienia, a następnie według identyfikatora zamówienia sprzedaży; tworzy element DataView na podstawie tego zapytania i wiąże element z DataView elementem 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

Używanie właściwości sortowania opartego na ciągach

Funkcja sortowania oparta na ciągach DataView nadal działa z linQ to DataSet. DataView Po utworzeniu elementu na podstawie zapytania LINQ to DataSet można użyć Sort właściwości , aby ustawić sortowanie w obiekcie DataView.

Funkcje sortowania oparte na ciągach i wyrażeniach wzajemnie się wykluczają. Sort Ustawienie właściwości spowoduje wyczyszczenie sortowania opartego na wyrażeniach dziedziczonego z zapytania, z którego DataView utworzono.

Aby uzyskać więcej informacji na temat filtrowania opartego na Sort ciągach, zobacz Sortowanie i filtrowanie danych.

Przykład

Poniższy przykład tworzy element DataView z tabeli Contact i sortuje wiersze według nazwiska w kolejności malejącej, a następnie imię w kolejności rosnącej:

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

Przykład

W poniższym przykładzie jest wysyłana kwerenda do tabeli Kontakt pod kątem nazwisk rozpoczynających się literą "S". Element A DataView jest tworzony na podstawie tego zapytania i powiązany z obiektem BindingSource .

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"

Czyszczenie sortowania

Informacje dotyczące sortowania elementu DataView można wyczyścić po ustawieniu Sort przy użyciu właściwości . Istnieją dwa sposoby czyszczenia informacji sortowania w pliku DataView:

  • Ustaw właściwość Sort na null.

  • Sort Ustaw właściwość na pusty ciąg.

Przykład

Poniższy przykład tworzy element DataView na podstawie zapytania i czyści sortowanie, ustawiając Sort właściwość na pusty ciąg:

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 = ""

Przykład

Poniższy przykład tworzy obiekt DataView z tabeli Contact i ustawia Sort właściwość na sortowanie według nazwiska w kolejności malejącej. Informacje dotyczące sortowania są następnie czyszczone przez ustawienie Sort właściwości na null:

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

Zobacz też