Bagikan melalui


Mengurutkan dengan DataView (LINQ ke DataSet)

Kemampuan untuk mengurutkan data berdasarkan kriteria tertentu dan kemudian menyajikan data ke klien melalui kontrol UI merupakan aspek penting dari pengikatan data. DataView menyediakan beberapa cara untuk mengurutkan data dan mengembalikan baris data yang diurutkan menurut kriteria pengurutan tertentu. Selain kemampuan pengurutan berbasis string, DataView juga memungkinkan Anda menggunakan ekspresi Language-Integrated Query (LINQ) untuk kriteria pengurutan. Ekspresi LINQ memungkinkan operasi pengurutan yang jauh lebih kompleks dan kuat daripada pengurutan berbasis string. Topik ini menjelaskan kedua pendekatan untuk mengurutkan menggunakan DataView.

Membuat DataView dari Kueri dengan Mengurutkan Informasi

Objek DataView dapat dibuat dari kueri LINQ ke DataSet. Jika kueri tersebut berisi klausa OrderBy, OrderByDescending, ThenBy, atau ThenByDescending, ekspresi dalam klausa ini digunakan sebagai dasar untuk mengurutkan data dalam DataView. Misalnya, jika kueri berisi klausa Order By…dan Then By…, DataView yang dihasilkan akan mengurutkan data menurut kedua kolom yang ditentukan.

Pengurutan berbasis ekspresi menawarkan pengurutan yang lebih kuat dan kompleks daripada pengurutan berbasis string yang lebih sederhana. Perhatikan bahwa pengurutan berbasis string dan berbasis ekspresi saling eksklusif. Jika Sort berbasis string diatur setelah DataView dibuat dari kueri, filter berbasis ekspresi yang disimpulkan dari kueri akan dihapus dan tidak dapat diatur ulang.

Indeks untuk DataView dibangun saat DataView dibuat dan saat informasi pengurutan atau pemfilteran diubah. Anda mendapatkan kinerja terbaik dengan menyediakan kriteria pengurutan di kueri LINQ ke DataSet tempat DataView dibuat dan tidak mengubah informasi pengurutan, nanti. Untuk informasi selengkapnya, baca Performa DataView.

Catatan

Dalam kebanyakan kasus, ekspresi yang digunakan untuk mengurutkan seharusnya tidak memiliki efek samping dan harus deterministic. Selain itu, ekspresi tidak boleh berisi logika apa pun yang bergantung pada sejumlah eksekusi yang ditetapkan, karena operasi pengurutan dapat dieksekusi beberapa kali.

Contoh

Contoh berikut menanyakan tabel SalesOrderHeader dan memesan baris yang dikembalikan menurut tanggal pemesanan; membuat DataView dari kueri itu; dan mengikat DataView ke 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

Contoh

Contoh berikut menanyakan tabel SalesOrderHeader dan memesan baris yang dikembalikan menurut jumlah total yang harus dibayar; membuat DataView dari kueri itu; dan mengikat DataView ke 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

Contoh

Contoh berikut menanyakan tabel SalesOrderDetail dan memesan baris yang dikembalikan menurut jumlah pesanan dan kemudian menurut ID pesanan penjualan; membuat DataView dari kueri itu; dan mengikat DataView ke 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

Menggunakan Properti Urutan Berbasis String

Fungsionalitas pengurutan berbasis string dari DataView masih berfungsi dengan LINQ ke DataSet. Setelah DataView dibuat dari kueri LINQ ke DataSet, Anda dapat menggunakan properti Sort untuk mengatur pengurutan pada DataView.

Fungsi pengurutan berbasis string dan berbasis ekspresi saling eksklusif. Mengatur properti Sort akan menghapus pengurutan berbasis ekspresi yang diwarisi dari kueri tempat DataView dibuat.

Untuk informasi selengkapnya tentang pemfilteran Sort berbasis string, baca Mengurutkan dan Memfilter Data.

Contoh

Contoh berikut membuat DataView dari tabel Kontak dan mengurutkan baris menurut nama belakang dalam urutan menurun, lalu nama depan dalam urutan menaik:

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

Contoh

Contoh berikut meng-kueri-kan tabel Kontak untuk nama belakang yang dimulai dengan huruf "S". DataView dibuat dari kueri itu dan diikat ke objek 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"

Menghapus Urutan

Informasi pengurutan pada DataView dapat dihapus setelah diatur menggunakan properti Sort. Ada dua cara untuk menghapus informasi pengurutan di DataView:

  • Atur properti Sort ke null.

  • Atur properti Sort untuk string yang kosong.

Contoh

Contoh berikut membuat DataView dari kueri dan menghapus pengurutan dengan mengatur properti Sort ke string kosong:

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

Contoh

Contoh berikut membuat DataView dari tabel Kontak dan mengatur properti Sort untuk mengurutkan menurut nama belakang dalam urutan menurun. Informasi pengurutan kemudian dihapus dengan mengatur properti Sort menjadi 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

Lihat juga