Aracılığıyla paylaş


Rapor Verilerini Sayfalama ve Sıralama (C#)

tarafından Scott Mitchell

PDF'i indirin

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ı PagingAndSortingyeni 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.masterkullanacak şekilde yapılandırılmasını sağlayın:

  • Default.aspx
  • SimplePagingSorting.aspx
  • EfficientPaging.aspx
  • SortParameter.aspx
  • CustomSortingUI.aspx

PagingAndSorting Klasörü Oluşturma ve Öğretici ASP.NET Sayfaları Ekleme

Ş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.

SectionLevelTutorialListing.ascx Kullanıcı Denetimini Default.aspx sayfasına ekleyin

Ş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>

Site Haritası'nı Yeni ASP.NET Sayfalarını içerecek şekilde güncelleştirme

Ş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.

GetProducts() Yöntemini Kullanarak Tüm Ürünler Hakkında Bilgi Alma

Ş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.

UPDATE, INSERT ve DELETE Sekmelerindeki Drop-Down Listesinde (Yok) Seçeneğini belirleyin

Ş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.

Ürünlerin her biri Listelenmiştir

Ş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 trueayarlar).

Sayfalama Desteği Eklemek için Sayfalandırmayı Etkinleştir Onay Kutusunu işaretleyin

Ş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 ve HorizontalAlign 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.

Sayfalama Etkinleştirildiğinde, Kayıtların Yalnızca Bir Alt Kümesi Bir Seferde Görüntülenir

Ş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.

Sayfa Numarasına Tıklanması Geri Göndermeye Neden Olur ve Kayıtların Uygun Alt Kümesini Gösterir

Ş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:

  1. GridView s (veya DetailsView veya FormView) PageIndexChanging olayı tetikleniyor
  2. ObjectDataSource, BLL'den tüm verileri yeniden istemektedir; GridView s PageIndex ve PageSize ö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
  3. 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.

Geçerli Sayfa Numarası ve Toplam Sayfa Sayısı Görüntülenir

Ş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.

Sayfa 6 Drop-Down Liste Öğesi Seçilirken Kullanıcı Otomatik Olarak Altıncı Sayfaya Alınır

Ş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.

Sonuçları Price sütununa göre artan düzende sıralanmış şekilde gösteren Basit Sayfalama ve Sıralama penceresinin ekran görüntüsü.

Ş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:

  1. GridView s Sorting olayı tetikleniyor
  2. GridView SortExpression özelliği, sıralama başlığı LinkButton'a tıklanan alanın SortExpression değerine ayarlanır
  3. ObjectDataSource, BLL'den tüm verileri yeniden alır ve ardından GridView s kullanarak verileri sıralar SortExpression
  4. 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)
  5. 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).

Price ve SortExpression vurgulanmış alanlar penceresinin ekran görüntüsü.

Ş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.

SortExpression Özelliğini Kaldırarak Kullanıcılar Artık Ürünleri Fiyata Göre Sıralayamıyor

Ş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 SortGridView 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).

Düğmeye Tıklanması Ürünleri En Pahalıdan En Aza Sıralar

Ş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:

  1. Bir postback gerçekleşir
  2. Veri Web denetimi ön düzey olay tetikler (PageIndexChanging veya Sorting)
  3. Tüm veriler ObjectDataSource tarafından yeniden alınır
  4. Veri Web denetiminin son düzey olayı tetikleniyor (PageIndexChanged veya Sorted)

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.