Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
tarafından Scott Mitchell
Sayfalama ve sıralama, çevrimiçi bir uygulamada veri görüntülerken kullanılan iki yaygın özelliktendir. Bu öğreticide, raporlarımıza sıralama ve sayfalama ekleme konusuna ilk göz atacağız ve sonraki öğreticilerde bunu oluşturacağız.
Giriş
Sayfalama ve sıralama, çevrimiçi bir uygulamada veri görüntülerken kullanılan iki yaygın özelliktendir. Örneğin, çevrimiçi bir kitapçıda ASP.NET kitap ararken, bu tür yüzlerce kitap olabilir, ancak arama sonuçlarının listelendiği raporda sayfa başına yalnızca on eşleşme listelenir. Ayrıca sonuçlar başlığa, fiyata, sayfa sayısına, yazar adına vb. göre sıralanabilir. Son 23 öğreticide veri eklemeye, düzenlemeye ve silmeye izin veren arabirimler de dahil olmak üzere çeşitli raporların nasıl derlendiği incelense de, verileri sıralamayı ve gördüğümüz tek sayfalama örneklerini DetailsView ve FormView denetimleriyle incelemedik.
Bu öğreticide, yalnızca birkaç onay kutusunu işaretleyerek gerçekleştirilebilen raporlarımıza sıralama ve sayfalama ekleme işleminin nasıl gerçekleştirildiğini göreceğiz. Ne yazık ki bu basit uygulamanın, sıralama arabiriminin yeterince tatmin edici olmaması ve sayfalama rutinlerinin büyük sonuç kümelerinde verimli bir şekilde gezinme için tasarlanmamış olması gibi dezavantajları vardır. Gelecek öğreticilerde, kullanıma hazır sayfalama ve sıralama çözümlerinin sınırlamalarını aşmanın yolları incelenecek.
1. Adım: Sayfalama ve Sıralama Öğreticisi Web Sayfalarını Ekleme
Bu öğreticiye başlamadan önce, bu öğretici ve sonraki üç öğretici için ihtiyacımız olan ASP.NET sayfalarını eklemek için biraz zaman ayıralım. Projede adlı PagingAndSorting
yeni bir klasör oluşturarak başlayın. Ardından, aşağıdaki beş ASP.NET sayfasını bu klasöre ekleyin ve tümünün ana sayfayı Site.master
kullanacak şekilde yapılandırılmasını sağlayın:
Default.aspx
SimplePagingSorting.aspx
EfficientPaging.aspx
SortParameter.aspx
CustomSortingUI.aspx
Şekil 1: PagingAndSorting Klasörü Oluşturma ve Öğretici ASP.NET Sayfaları Ekleme
Ardından sayfayı Default.aspx
açın ve Kullanıcı Denetimi'ni klasörden SectionLevelTutorialListing.ascx
Tasarım yüzeyine sürükleyinUserControls
. Ana Sayfalar ve Site Gezintisi öğreticisinde oluşturduğumuz Bu Kullanıcı Denetimi, site haritasını numaralandırır ve bu öğreticileri geçerli bölümde madde işaretli bir listede görüntüler.
Şekil 2: SectionLevelTutorialListing.ascx Kullanıcı Denetimini Default.aspx ekleme
Madde işaretli listenin oluşturacağımız sayfalama ve sıralama öğreticilerini görüntülemesini sağlamak için bunları site haritasına eklememiz gerekir.
Web.sitemap
Dosyayı açın ve Site haritası düğümünü düzenleme, ekleme ve silme işaretlemesinin ardından aşağıdaki işaretlemeyi ekleyin:
<siteMapNode title="Paging and Sorting" url="~/PagingAndSorting/Default.aspx"
description="Samples of Reports that Provide Paging and Sorting Capabilities">
<siteMapNode url="~/PagingAndSorting/SimplePagingSorting.aspx"
title="Simple Paging & Sorting Examples"
description="Examines how to add simple paging and sorting support." />
<siteMapNode url="~/PagingAndSorting/EfficientPaging.aspx"
title="Efficiently Paging Through Large Result Sets"
description="Learn how to efficiently page through large result sets." />
<siteMapNode url="~/PagingAndSorting/SortParameter.aspx"
title="Sorting Data at the BLL or DAL"
description="Illustrates how to perform sorting logic in the Business Logic
Layer or Data Access Layer." />
<siteMapNode url="~/PagingAndSorting/CustomSortingUI.aspx"
title="Customizing the Sorting User Interface"
description="Learn how to customize and improve the sorting user interface." />
</siteMapNode>
Şekil 3: Site Haritasını Yeni ASP.NET Sayfalarını Içerecek Şekilde Güncelleştirme
2. Adım: GridView'da Ürün Bilgilerini Görüntüleme
Sayfalama ve sıralama özelliklerini uygulamadan önce, ürün bilgilerini listeleyen standart, sıralanamayan, sayfalanamayan bir GridView oluşturalım. Bu, bu öğretici serisi boyunca daha önce birçok kez yaptığımız bir görevdir, bu nedenle bu adımlar tanıdık olmalıdır. Başlangıç olarak SimplePagingSorting.aspx
sayfasını açın ve GridView denetimini Araç Kutusu'ndan Tasarımcı'ya sürükleyip özelliğini ID
olarak Products
ayarlayın. Ardından, tüm ürün bilgilerini döndürmek için ProductsBLL sınıfı GetProducts()
yöntemini kullanan yeni bir ObjectDataSource oluşturun.
Şekil 4: GetProducts() Yöntemini Kullanarak Tüm Ürünler Hakkında Bilgi Alma
Bu rapor salt okunur bir rapor olduğundan ObjectDataSource'un Insert()
, Update()
veya Delete()
yöntemlerini ilgili ProductsBLL
yöntemlerle eşlemeniz gerekmez; bu nedenle, UPDATE, INSERT ve DELETE sekmeleri için açılan listeden (Hiçbiri) öğesini seçin.
Şekil 5: UPDATE, INSERT ve DELETE Sekmelerindeki Drop-Down Listesinde (Yok) Seçeneğini Belirleyin
Şimdi GridView alanlarını özelleştirerek yalnızca ürün adlarının, tedarikçilerin, kategorilerin, fiyatların ve sonlandırılan durumların görüntülenmesini sağlayın. Ayrıca, özellikleri ayarlama HeaderText
veya fiyatı para birimi olarak biçimlendirme gibi alan düzeyinde biçimlendirme değişiklikleri yapmaktan çekinmeyin. Bu değişikliklerden sonra GridView bildirim temelli işaretlemeniz aşağıdakine benzer görünmelidir:
<asp:GridView ID="Products" runat="server" AutoGenerateColumns="False"
DataKeyNames="ProductID" DataSourceID="ObjectDataSource1"
EnableViewState="False">
<Columns>
<asp:BoundField DataField="ProductName" HeaderText="Product"
SortExpression="ProductName" />
<asp:BoundField DataField="CategoryName" HeaderText="Category"
ReadOnly="True" SortExpression="CategoryName" />
<asp:BoundField DataField="SupplierName" HeaderText="Supplier"
ReadOnly="True" SortExpression="SupplierName" />
<asp:BoundField DataField="UnitPrice" HeaderText="Price"
SortExpression="UnitPrice" DataFormatString="{0:C}"
HtmlEncode="False" />
<asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued"
SortExpression="Discontinued" />
</Columns>
</asp:GridView>
Şekil 6'da tarayıcı üzerinden görüntülendiğinde ilerleme durumumuz gösterilmektedir. Sayfada tüm ürünlerin tek bir ekranda listelendiğini ve her ürünün adını, kategorisini, tedarikçisini, fiyatını ve kullanımdan kaldırılan durumunu gösterdiğine dikkat edin.
Şekil 6: Ürünlerin Her Biri Listelenir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
3. Adım: Sayfalama Desteği Ekleme
Tüm ürünlerin tek ekranda listelenmesi, kullanıcının verileri denetlemesi için aşırı bilgiye yol açabilir. Sonuçların daha yönetilebilir olmasına yardımcı olmak için verileri daha küçük veri sayfalarına bölebilir ve kullanıcının verileri tek adım adım geçirmesini sağlayabiliriz. Bunu yapmak için GridView'un akıllı etiketinden Sayfalandırmayı Etkinleştir onay kutusunu işaretlemeniz yeterlidir (bu, GridView s AllowPaging
özelliğini olarak true
ayarlar).
Şekil 7: Sayfalama Desteği Eklemek için Sayfalamayı Etkinleştir Onay Kutusunu İşaretleyin (Tam boyutlu görüntüyü görmek için tıklayın)
Disk belleğinin etkinleştirilmesi, sayfa başına gösterilen kayıt sayısını sınırlar ve GridView'a bir disk belleği arabirimi ekler. Şekil 7'de gösterilen varsayılan sayfalama arabirimi, kullanıcının bir veri sayfasından diğerine hızla gezinmesine olanak sağlayan bir sayfa numarası dizisidir. Bu sayfalama arabirimi, geçmiş öğreticilerde DetailsView ve FormView denetimlerine sayfalama desteği eklerken gördüğümüz için tanıdık görünüyor.
Hem DetailsView hem de FormView denetimleri sayfa başına yalnızca tek bir kayıt gösterir. Ancak GridView, sayfa başına kaç kaydın gösterileceğini belirlemek için özelliğinePageSize
başvurur (bu özellik varsayılan olarak 10 değerine sahiptir).
Bu GridView, DetailsView ve FormView sayfalama arabirimi aşağıdaki özellikler kullanılarak özelleştirilebilir.
PagerStyle
sayfalama arayüzünün stil bilgilerini gösterir;BackColor
,ForeColor
,CssClass
veHorizontalAlign
gibi ayarları belirtebilir.PagerSettings
disk belleği arabiriminin işlevselliğini özelleştirebilen özellikler içerir;PageButtonCount
, disk belleği arabiriminde görüntülenen en fazla sayısal sayfa numarası sayısını gösterir (varsayılan değer 10'dur);Mode
özelliği , disk belleği arabiriminin nasıl çalıştığını ve şu şekilde ayarlanabileceğini gösterir:-
NextPrevious
kullanıcının bir kerede bir sayfa ileri veya geri adım atmasına olanak sağlayan sonraki ve önceki düğmeleri gösterir -
NextPreviousFirstLast
Sonraki ve Önceki düğmelerine ek olarak, İlk ve Son düğmeleri de dahil edilir ve kullanıcının verilerin ilk veya son sayfasına hızla geçmesine olanak tanır -
Numeric
kullanıcının hemen herhangi bir sayfaya atlayabilmesini sağlayan bir dizi sayfa numarası gösterir -
NumericFirstLast
sayfa numaralarına ek olarak, kullanıcının verilerin ilk veya son sayfasına hızla geçişini sağlayan İlk ve Son düğmelerini içerir; İlk/Son düğmeleri yalnızca tüm sayısal sayfa numaraları sığamıyorsa gösterilir
-
Ayrıca, GridView, DetailsView ve FormView'un tümü, geçerli görüntülenen sayfayı gösteren PageIndex
ve toplam veri sayfası sayısını gösteren PageCount
özelliklerini sunar.
PageIndex
özelliği 0'dan başlayarak dizine eklenir, yani verilerin PageIndex
ilk sayfası görüntülenirken 0'a eşit olur. Öte yandan, PageCount
, 1'den itibaren saymaya başlar, yani PageCount
0 ile PageCount - 1
arasında değerlerle sınırlıdır.
GridView sayfalama arabirimimizin varsayılan görünümünü geliştirmek için biraz zaman ayıralım. Özellikle, sayfalama arabirimi açık gri bir arka planla sağa hizalansın. Bu özellikleri doğrudan GridView s PagerStyle
özelliği aracılığıyla ayarlamak yerine, içinde adlı Styles.css
bir CSS sınıfı PagerRowStyle
oluşturalım ve ardından s PagerStyle
özelliğini Temamız aracılığıyla atayalımCssClass
. Başlangıç olarak aşağıdaki CSS sınıf tanımını açın Styles.css
ve ekleyin:
.PagerRowStyle
{
background-color: #ddd;
text-align: right;
}
Ardından, GridView.skin
dosyasını DataWebControls
klasörünün içindeki App_Themes
klasöründe açın.
Ana Sayfalar ve Site Gezintisi öğreticisinde ele aldığımız gibi, Görünüm dosyaları bir Web denetimi için varsayılan özellik değerlerini belirtmek için kullanılabilir. Bu nedenle, mevcut ayarları, PagerStyle
s CssClass
özelliğini PagerRowStyle
olarak ayarlamayı içerecek şekilde genişletin. Ayrıca, NumericFirstLast
sayfalama arabirimini kullanarak en fazla beş sayısal sayfa düğmesini gösterecek şekilde yapılandıralım.
<asp:GridView runat="server" CssClass="DataWebControlStyle">
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
<RowStyle CssClass="RowStyle" />
<HeaderStyle CssClass="HeaderStyle" />
<FooterStyle CssClass="FooterStyle" />
<SelectedRowStyle CssClass="SelectedRowStyle" />
<PagerStyle CssClass="PagerRowStyle" />
<PagerSettings Mode="NumericFirstLast" PageButtonCount="5" />
</asp:GridView>
Sayfalama Kullanıcı Deneyimi
Şekil 8'de, GridView'un Sayfalandırmayı Etkinleştir onay kutusu işaretlendikten ve PagerStyle
dosya üzerinden ve PagerSettings
yapılandırmaları yapıldıktan sonra tarayıcı üzerinden GridView.skin
ziyaret edildiğinde web sayfası gösterilmektedir. Yalnızca on kaydın gösterildiğine ve sayfalama arayüzünün verilerin ilk sayfasını görüntülediğimize işaret ettiğine dikkat edin.
Şekil 8: Sayfalama Etkinken, Kayıtların Yalnızca Bir Alt Kümesi Aynı Anda Görüntülenir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Kullanıcı sayfalama arabirimindeki sayfa numaralarından birine tıkladığında, bir postback gerçekleşir ve istenen sayfanın kayıtlarını gösteren sayfa yeniden yüklenir. Şekil 9'da verilerin son sayfasını görüntülemeyi seçtikten sonra elde edilen sonuçlar gösterilir. Son sayfada yalnızca bir kayıt olduğuna dikkat edin; bu, toplamda 81 kayıt olduğu ve bu nedenle her biri 10 kayıttan oluşan sekiz sayfa ile tek bir kaydın yer aldığı bir sayfanın daha bulunması sebebiyledir.
Şekil 9: Sayfa Numarasına Tıklanması Geri Göndermeye Neden Olur ve Uygun Kayıt Alt Kümesini Gösterir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Sayfalama s Server-Side İş Akışı
Son kullanıcı sayfalama arabirimindeki bir düğmeye tıkladığında bir geri dönüş başlatılır ve aşağıdaki sunucu tarafı iş akışı başlar:
- GridView s (veya DetailsView veya FormView)
PageIndexChanging
olayı tetikleniyor - ObjectDataSource, BLL'den tüm verileri yeniden istemektedir; GridView s
PageIndex
vePageSize
özellik değerleri, BLL'den döndürülen kayıtların GridView'da görüntülenmesi gerektiğini belirlemek için kullanılır - GridView'ün
PageIndexChanged
olayı tetiklenir
2. Adımda, ObjectDataSource tüm verileri kendi veri kaynağından yeniden istemektedir. Bu sayfalama stili genellikle varsayılan sayfalama olarak adlandırılır. Bu, AllowPaging
özelliğini true
olarak ayarlarken varsayılan olarak kullanılan sayfalama davranışıdır. Varsayılan sayfalama ile web denetimi, tarayıcıya gönderilen HTML'de kayıtların yalnızca bir alt kümesi işlenmiş olsa bile her veri sayfası için tüm kayıtları alır. Veritabanı verileri BLL veya ObjectDataSource tarafından önbelleğe alınmadığı sürece, varsayılan sayfalama, yeterince büyük sonuç kümeleri veya çok sayıda eşzamanlı kullanıcısı olan web uygulamaları için işe yaramaz.
Bir sonraki öğreticide özel sayfalama nasıl uygulayacağımızı inceleyeceğiz. Özel sayfalama ile, ObjectDataSource'a yalnızca istenen veri sayfası için gerekli olan kayıtları almasını özellikle bildirebilirsiniz. Tahmin edebileceğiniz gibi, özel sayfalama büyük sonuç kümeleri arasında gezinmenin verimliliğini büyük ölçüde artırır.
Uyarı
Varsayılan sayfalama, yeterince büyük sonuç kümelerini sayfalarken veya aynı anda çok sayıda kullanıcıya sahip sitelerde uygun olmayabilir; ancak, özel sayfalamanın uygulanması için daha fazla değişiklik ve çaba gerektirdiğini ve onay kutusunu işaretlemek kadar basit olmadığını (varsayılan sayfalama gibi) fark edin. Bu nedenle, varsayılan sayfalama küçük, düşük trafikli web siteleri için ideal bir seçim olabilir veya uygulanması çok daha kolay ve daha hızlı olduğundan görece küçük sonuç kümeleri aracılığıyla sayfalama yapılabilir.
Örneğin, veritabanımızda hiçbir zaman 100'den fazla ürüne sahip olmayacağımızı biliyorsak, özel sayfalama kullanılarak elde edilen en az performans artışı, bunu uygulamak için gereken çaba tarafından büyük olasılıkla dengelenir. Bir gün binlerce veya on binlerce ürünümüz olursa, özel sayfalandırmayı uygulamamak uygulamamızın ölçeklenebilirliğini büyük ölçüde engeller.
4. Adım: Sayfalandırma Deneyimini Özelleştirme
Veri web denetimleri, kullanıcının sayfalama deneyimini geliştirmek için kullanılabilecek bir dizi özellik sağlar.
PageCount
Örneğin özelliği, toplam sayfa sayısını gösterirkenPageIndex
, özelliği ziyaret edilen geçerli sayfayı gösterir ve kullanıcıyı belirli bir sayfaya hızla taşımak için ayarlanabilir. Kullanıcının disk belleği deneyimini geliştirmek için bu özelliklerin nasıl kullanılacağını göstermek için sayfamıza, kullanıcıya şu anda hangi sayfayı ziyaret ettiğini bildiren bir Label Web denetimi ve belirli bir sayfaya hızlı bir şekilde atlayabilmesini sağlayan bir DropDownList denetimi ekleyelim.
İlk olarak, sayfanıza bir Label Web denetimi ekleyin, ID
özelliğini PagingInformation
olarak ayarlayın ve Text
özelliğini temizleyin. Ardından GridView DataBound
olayı için bir olay işleyicisi oluşturun ve aşağıdaki kodu ekleyin:
protected void Products_DataBound(object sender, EventArgs e)
{
PagingInformation.Text = string.Format("You are viewing page {0} of {1}...",
Products.PageIndex + 1, Products.PageCount);
}
Bu olay işleyicisi, kullanıcıya şu anda ziyaret etmekte olduğu sayfanın toplam kaç sayfa arasında olduğunu bildiren bir mesajın Label s PagingInformation
özelliğine atanmasına yardımcı olur Text
(dizine almaya 0'dan başladığımız için Products.PageIndex + 1
özelliğine 1 ekleriz Products.PageCount
). Bu Label s Text
özelliğini DataBound
olay işleyicisinde atamayı, PageIndexChanged
olay işleyicisine karşı seçtim çünkü DataBound
olayı, veriler GridView'a her bağlandığında tetiklenirken, PageIndexChanged
olay işleyicisi yalnızca sayfa dizini değiştirildiğinde tetikleniyor. GridView ilk sayfa ziyaretinde başlangıçta veriye bağlı olduğunda, PageIndexChanging
olay tetiklenmiyor (ancak DataBound
olay tetikleniyor).
Bu eklemeyle, kullanıcıya artık hangi sayfayı ziyaret ettiğini ve toplam veri sayfası sayısını belirten bir ileti gösterilir.
Şekil 10: Geçerli Sayfa Numarası ve Toplam Sayfa Sayısı Görüntüleniyor (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Etiket denetimine ek olarak, GridView'da görüntülenen sayfanın seçili olduğu sayfa numaralarını listeleyen bir DropDownList denetimi de ekleyelim. Buradaki fikir, kullanıcının DropDownList'ten yeni sayfa dizinini seçerek geçerli sayfadan diğerine hızla atlayabilmesidir. Tasarıma bir DropDownList ekleyerek, ID
özelliğini PageList
olarak ayarlayın ve akıllı etiketinden AutoPostBack'i Etkinleştir seçeneğini işaretleyin.
Ardından, olay işleyicisine DataBound
dönün ve aşağıdaki kodu ekleyin:
// Clear out all of the items in the DropDownList
PageList.Items.Clear();
// Add a ListItem for each page
for (int i = 0; i < Products.PageCount; i++)
{
// Add the new ListItem
ListItem pageListItem = new ListItem(string.Concat("Page ", i + 1), i.ToString());
PageList.Items.Add(pageListItem);
// select the current item, if needed
if (i == Products.PageIndex)
pageListItem.Selected = true;
}
Bu kod DropDownList içindeki PageList
öğeleri temizleyerek başlar. Bu gereksiz görünebilir, çünkü sayfa sayısının değişmesini beklemezsiniz, ancak diğer kullanıcılar aynı anda sistemi kullanıyor ve tablodan kayıt Products
ekliyor veya kaldırıyor olabilir. Bu tür eklemeler veya silme işlemleri, veri sayfalarının sayısını değiştirebilir.
Ardından sayfa numaralarını yeniden oluşturmamız ve geçerli GridView'a PageIndex
eşleyen numarayı varsayılan olarak seçmemiz gerekir. Bunu, 0'dan PageCount - 1
'a kadar olan bir döngü ile gerçekleştiririz; her yinelemede yeni bir ListItem
ekleriz ve geçerli yineleme dizini GridView'un Selected
özelliğine eşitse, PageIndex
özelliğini true olarak ayarlarız.
Son olarak DropDownList SelectedIndexChanged
olayı için kullanıcı listeden farklı bir öğe seçtiğinde tetiklenen bir olay işleyicisi oluşturmamız gerekir. Bu olay işleyicisini oluşturmak için Tasarımcı'da DropDownList'e çift tıklayın ve aşağıdaki kodu ekleyin:
protected void PageList_SelectedIndexChanged(object sender, EventArgs e)
{
// Jump to the specified page
Products.PageIndex = Convert.ToInt32(PageList.SelectedValue);
}
Şekil 11'de gösterildiği gibi, yalnızca GridView s PageIndex
özelliğinin değiştirilmesi verilerin GridView'a yeniden bağlanmasına neden olur. GridView olay DataBound
işleyicisinde uygun DropDownList ListItem
seçilir.
Şekil 11: Sayfa 6 Drop-Down Liste Öğesi Seçildiğinde Kullanıcı Otomatik Olarak Altıncı Sayfaya Alınır (Tam boyutlu görüntüyü görüntülemek için tıklayın)
5. Adım: Bi-Directional Sıralama Desteği Ekleme
Çift yönlü sıralama desteği eklemek, sayfalama desteği eklemek kadar basittir: GridView'un akıllı etiketinden Sıralamayı Etkinleştir seçeneğini işaretlemeniz yeterlidir (bu, GridView'un AllowSorting
özelliğinitrue
olarak ayarlar). Bu, GridView alanlarının üst bilgi başlıklarının her birini, tıklandığında bir postback gerçekleştiren ve tıklanan sütuna göre artan sırada sıralanmış verileri döndüren LinkButton'lar olarak işler. Aynı üst bilgi LinkButton'a yeniden tıklandığında veriler azalan düzende yeniden sıralanır.
Uyarı
Yazılan Veri Kümesi yerine özel bir Veri Erişim Katmanı kullanıyorsanız GridView akıllı etiketinde Sıralamayı Etkinleştir seçeneğiniz olmayabilir. Yalnızca yerel olarak sıralamayı destekleyen veri kaynaklarına bağlı GridView'lar bu onay kutusuna sahiptir. Yazılan Veri Kümesi, ADO.NET DataTable'ın, çağrıldığında DataTable'ın DataRows'larını belirtilen ölçütleri kullanarak sıralayan bir Sort
yöntem sağladığından, kullanıma hazır sıralama desteği sunar.
DAL'niz yerel olarak sıralamayı destekleyen nesneler döndürmüyorsa, ObjectDataSource'un sıralama bilgilerini İş Mantığı Katmanı'na geçirmesini sağlayacak şekilde yapılandırmanız gerekir. Bu, verileri sıralayabilir veya verileri DAL'ye göre sıralayabilir. Gelecekteki bir öğreticide İş Mantığı ve Veri Erişim Katmanları'nda verileri sıralamayı keşfedeceğiz.
Sıralama LinkButton'ları HTML köprüleri olarak işlenir. Bu köprüler, geçerli renkleri (ziyaret edilmemiş bir bağlantı için mavi ve ziyaret edilmiş bir bağlantı için koyu kırmızı) üst bilgi satırının arka plan rengiyle çelişmektedir. Bunun yerine, ziyaret edilip edilmediklerine bakılmaksızın tüm üst bilgi satırı bağlantılarının beyaz olarak görüntülenmesini sağlayın. Bu, sınıfına aşağıdakileri Styles.css
ekleyerek gerçekleştirilebilir:
.HeaderStyle a, .HeaderStyle a:visited
{
color: White;
}
Bu söz dizimi, HeaderStyle sınıfını kullanan bir öğede bu köprüleri görüntülerken beyaz metin kullanılacağını gösterir.
Bu CSS ekleme işleminden sonra, sayfayı bir tarayıcı üzerinden ziyaret ettiğinizde ekranınız Şekil 12'ye benzer görünmelidir. Özellikle, Şekil 12'de Fiyat alanının üst bilgi bağlantısına tıklandıktan sonra elde edilen sonuçlar gösterilir.
Şekil 12: Sonuçlar UnitPrice'a Göre Artan Düzende Sıralandı (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Sıralama İş Akışını inceleme
Tüm GridView alanları BoundField, CheckBoxField, TemplateField vb. alanları, alanın sıralama üst bilgisi bağlantısına tıklandığında verileri sıralamak için kullanılacak ifadeyi gösteren bir SortExpression
özelliğe sahiptir. GridView'un da bir SortExpression
özelliği vardır. LinkButton sıralama üst bilgisine tıklandığında, GridView bu alanın SortExpression
değerini SortExpression
özelliğine atar. Ardından, veriler ObjectDataSource'tan yeniden alınır ve GridView s SortExpression
özelliğine göre sıralanır. Aşağıdaki listede, bir son kullanıcı GridView'daki verileri sıraladığında oluşan adımların sırası ayrıntılı olarak açıklanır:
- GridView s Sorting olayı tetikleniyor
- GridView
SortExpression
özelliği, sıralama başlığı LinkButton'a tıklanan alanınSortExpression
değerine ayarlanır - ObjectDataSource, BLL'den tüm verileri yeniden alır ve ardından GridView s kullanarak verileri sıralar
SortExpression
- GridView s
PageIndex
Özelliği 0 olarak sıfırlanır, yani kullanıcı sıralanırken ilk veri sayfasına döndürülür (sayfalandırma desteği uygulandığı varsayılarak) - GridView olayı
Sorted
tetikler
Varsayılan sayfalamada olduğu gibi, varsayılan sıralama seçeneği de BLL'den tüm kayıtları yeniden alır. Sayfalama olmadan sıralama veya varsayılan sayfalama ile sıralama kullanıldığında, performans düşüşünü aşmanın bir yolu yoktur (veritabanı verilerini önbelleğe almak dışında). Ancak, gelecekteki bir eğitimde göreceğimiz gibi, özel sayfalama kullanırken verileri verimli bir şekilde sıralamak mümkündür.
GridView'in akıllı etiketindeki açılan liste aracılığıyla ObjectDataSource'u GridView'e bağlarken, her GridView alanının SortExpression
özelliğine otomatik olarak sınıftaki ProductsRow
veri alanının adı atanır. Örneğin, ProductName
aşağıdaki bildirim temelli işaretlemede gösterildiği gibi BoundField s SortExpression
değeri olarak ayarlanır ProductName
:
<asp:BoundField DataField="ProductName" HeaderText="Product"
SortExpression="ProductName" />
Bir alan, SortExpression
özelliğini temizleyerek (boş bir dizeye atayarak) sıralanamaz hale getirilecek şekilde yapılandırılabilir. Bunu göstermek için, müşterilerimizin ürünlerimizi fiyata göre sıralamasına izin vermek istemediğimiz düşünelim.
UnitPrice
BoundField s SortExpression
özelliği bildirim temelli işaretlemeden veya Alanlar iletişim kutusundan kaldırılabilir (GridView akıllı etiketindeki Sütunları Düzenle bağlantısına tıklanarak erişilebilir).
Şekil 13: Sonuçlar UnitPrice'a Göre Artan Düzende Sıralanmış
SortExpression
özelliği UnitPrice
BoundField için kaldırıldıktan sonra, üst bilgi bağlantı yerine metin olarak işlenir ve böylece kullanıcıların verileri fiyata göre sıralaması engellenir.
Şekil 14: SortExpression Özelliğini Kaldırarak Kullanıcılar Ürünleri Artık Fiyata Göre Sıralayamaz (Tam boyutlu görüntüyü görüntülemek için tıklayın)
GridView'ı Program Aracılığıyla Sıralama
GridView s yöntemini kullanarak Sort
GridView içeriğini program aracılığıyla da sıralayabilirsiniz. Sıralama yapmak için SortExpression
değerini, SortDirection
veya Ascending
ile birlikte Descending
içinde geçmek yeterlidir; bu şekilde GridView'ın verileri yeniden sıralanacaktır.
Düşünün ki UnitPrice
'a göre sıralamayı kapatmamızın nedeni, müşterilerimizin yalnızca en düşük fiyatlı ürünleri satın almalarından endişe etmemizdi. Ancak, onları en pahalı ürünleri satın almaya teşvik etmek istiyoruz, bu nedenle ürünleri fiyata göre sıralayabilmelerini istiyoruz, ancak yalnızca en pahalı fiyattan en düşük fiyata kadar.
Bunu yapmak için sayfaya bir Düğme Web denetimi ekleyin, ID
özelliğini SortPriceDescending
olarak ve Text
özelliğini Fiyata Göre Sırala olarak ayarlayın. Ardından, Tasarımcı'da Düğme Click
denetimine çift tıklayarak Düğme olayını işleyen bir olay işleyicisi oluşturun. Bu olay işleyicisine aşağıdaki kodu ekleyin:
protected void SortPriceDescending_Click(object sender, EventArgs e)
{
// Sort by UnitPrice in descending order
Products.Sort("UnitPrice", SortDirection.Descending);
}
Bu Düğmeye tıklandığında, kullanıcı, ürünler fiyata göre en pahalıdan en ucuza sıralanmış ilk sayfaya döner (bkz. Şekil 15).
Şekil 15: Düğmeye Tıklanması Ürünleri En Pahalıdan En Aza Sıralar (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Özet
Bu öğreticide, varsayılan sayfalama ve sıralama işlevlerinin, ki her ikisi de bir onay kutusunu işaretlemek kadar kolay, nasıl uygulandığını gördük! Kullanıcı verileri sıraladığında veya sayfaladığında benzer bir iş akışı açılır:
- Bir postback gerçekleşir
- Veri Web denetimi ön düzey olay tetikler (
PageIndexChanging
veyaSorting
) - Tüm veriler ObjectDataSource tarafından yeniden alınır
- Veri Web denetiminin son düzey olayı tetikleniyor (
PageIndexChanged
veyaSorted
)
Temel disk belleği ve sıralama uygulamak kolay olsa da, daha verimli özel disk belleği kullanmak veya disk belleği veya sıralama arabirimini daha da geliştirmek için daha fazla çaba gösterilmelidir. Gelecek eğitimlerde bu konular ele alınacaktır.
Mutlu Programlama!
Yazar Hakkında
Yedi ASP/ASP.NET kitabının yazarı ve 4GuysFromRolla.com kurucusu Scott Mitchell, 1998'den beri Microsoft Web teknolojileriyle çalışmaktadır. Scott bağımsız bir danışman, eğitmen ve yazar olarak çalışır. Son kitabı Sams Teach Yourself ASP.NET 24 Hours 2.0'dır. Ona adresinden mitchell@4GuysFromRolla.comulaşabilirsiniz.