DataView ile Sıralama (LINQ to DataSet)
Verileri belirli ölçütlere göre sıralama ve ardından kullanıcı arabirimi denetimi aracılığıyla verileri istemciye sunma özelliği, veri bağlamanın önemli bir yönüdür. DataView verileri sıralamak ve belirli sıralama ölçütlerine göre sıralanmış veri satırları döndürmek için çeşitli yollar sağlar. Dize tabanlı sıralama özelliklerine ek olarak, DataView sıralama ölçütleri için DilLe Tümleşik Sorgu (LINQ) ifadelerini kullanmanıza da olanak tanır. LINQ ifadeleri, dize tabanlı sıralamaya göre çok daha karmaşık ve güçlü sıralama işlemlerine olanak sağlar. Bu konu, kullanarak DataViewsıralamaya yönelik her iki yaklaşımı da açıklar.
Sıralama Bilgileriyle Sorgudan DataView Oluşturma
LINQ DataView to DataSet sorgusundan nesne oluşturulabilir. Bu sorgu bir OrderBy, OrderByDescending, ThenByveya ThenByDescending yan tümcesi içeriyorsa, bu yan tümcelerdeki ifadeler içindeki DataViewverileri sıralamak için temel olarak kullanılır. Örneğin, sorgu and Then By…
yan tümcelerini içeriyorsaOrder By…
, sonuçta DataView elde edilen veriler belirtilen her iki sütuna göre sıralanır.
İfade tabanlı sıralama, daha basit dize tabanlı sıralamaya göre daha güçlü ve karmaşık sıralama sunar. Dize tabanlı ve ifade tabanlı sıralamanın birbirini dışladığını unutmayın. Dize tabanlı Sort bir sorgudan oluşturulduktan sonra DataView ayarlanırsa, sorgudan çıkarılan ifade tabanlı filtre temizlenir ve sıfırlanamaz.
için DataView dizin, hem oluşturulduğunda hem de DataView sıralama veya filtreleme bilgilerinden herhangi biri değiştirildiğinde oluşturulur. LinQ to DataSet sorgusunda DataView oluşturulduğu sıralama ölçütlerini sağlayarak ve sıralama bilgilerini daha sonra değiştirmeyerek en iyi performansı elde edersiniz. Daha fazla bilgi için bkz . DataView Performansı.
Not
Çoğu durumda, sıralama için kullanılan ifadelerin yan etkileri olmamalıdır ve belirleyici olmalıdır. Ayrıca, sıralama işlemleri birkaç kez yürütülebileceğinden, ifadeler belirli sayıda yürütmeye bağlı herhangi bir mantık içermemelidir.
Örnek
Aşağıdaki örnek SalesOrderHeader tablosunu sorgular ve döndürülen satırları sipariş tarihine göre sıralar; bu sorgudan bir DataView oluşturur ve öğesini DataView öğesine BindingSourcebağlar.
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
Örnek
Aşağıdaki örnek SalesOrderHeader tablosunu sorgular ve döndürülen satırı vadesi gelen toplam tutara göre sıralar; bu sorgudan bir DataView oluşturur ve öğesini DataView öğesine BindingSourcebağlar.
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
Örnek
Aşağıdaki örnek SalesOrderDetail tablosunu sorgular ve döndürülen satırları sipariş miktarına ve ardından satış siparişi kimliğine göre sipariş eder; bu sorgudan bir DataView oluşturur ve öğesini DataView öğesine BindingSourcebağlar.
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
Dize Tabanlı Sıralama Özelliğini Kullanma
dize tabanlı sıralama işlevi DataView hala LINQ to DataSet ile çalışır. Bir DataView LINQ to DataSet sorgusu oluşturulduktan sonra, sıralamayı Sort üzerinde DataViewayarlamak için özelliğini kullanabilirsiniz.
Dize tabanlı ve ifade tabanlı sıralama işlevi birbirini dışlar. özelliğinin Sort ayarlanması, oluşturulduğu sorgudan devralınan ifade tabanlı sıralamayı DataView temizler.
Dize tabanlı Sort filtreleme hakkında daha fazla bilgi için bkz . Verileri Sıralama ve Filtreleme.
Örnek
Aşağıdaki örnek, Kişi tablosundan bir DataView oluşturur ve satırları soyadına göre azalan düzende sıralar, ardından ad artan düzende sıralar:
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()
Örnek
Aşağıdaki örnek, Kişi tablosunda "S" harfiyle başlayan soyadlarını sorgular. DataView bu sorgudan oluşturulur ve bir BindingSource nesneye bağlıdır.
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"
Sıralamayı Temizleme
üzerindeki DataView sıralama bilgileri, özelliği kullanılarak Sort ayarlandıktan sonra temizlenebilir. içindeki sıralama bilgilerini DataViewtemizlemenin iki yolu vardır:
Örnek
Aşağıdaki örnek bir sorgudan bir DataView oluşturur ve özelliği boş bir dizeye ayarlayarak sıralamayı Sort temizler:
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 = ""
Örnek
Aşağıdaki örnek, Kişi tablosundan bir DataView oluşturur ve özelliğini soyadına göre azalan düzende sıralanacak şekilde ayarlar Sort . Ardından, özelliği null
olarak ayarlanarak Sort sıralama bilgileri temizlenir:
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