DataList veya Repeater Denetiminde Rapor Verilerini Sayfalama (VB)

tarafından Scott Mitchell

PDF’yi İndir

Ne DataList ne de Repeater otomatik disk belleği veya sıralama desteği sunmasa da, bu öğreticide çok daha esnek disk belleği ve veri görüntüleme arabirimlerine olanak tanıyan DataList veya Repeater'a disk belleği desteğinin nasıl ekleneceği gösterilmektedir.

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ımına, yazar adına vb. göre sıralanabilir. Rapor Verilerini Sayfalama ve Sıralama öğreticisinde ele aldığımız gibi GridView, DetailsView ve FormView denetimlerinin tümü, onay kutusunun onay kutusunda etkinleştirilebilen yerleşik disk belleği desteği sağlar. GridView sıralama desteği de içerir.

Ne yazık ki DataList veya Repeater otomatik sayfalama veya sıralama desteği sunmaz. Bu öğreticide DataList veya Repeater'a disk belleği desteği eklemeyi inceleyeceğiz. Disk belleği arabirimini el ile oluşturmalı, uygun kayıt sayfasını görüntülemeli ve geri göndermeler arasında ziyaret edilen sayfayı anımsamalıyız. Bu, GridView, DetailsView veya FormView'dan daha fazla zaman ve kod olsa da, DataList ve Repeater çok daha esnek disk belleği ve veri görüntüleme arabirimlerine olanak sağlar.

Not

Bu öğretici yalnızca disk belleğine odaklanır. Sonraki öğreticide dikkatimizi sıralama özellikleri eklemeye çevireceğiz.

1. Adım: Sayfalama ve Sıralama Öğreticisi Web Sayfalarını Ekleme

Bu öğreticiye başlamadan önce, bu öğretici için ihtiyacımız olan ASP.NET sayfalarını ve bir sonrakini eklemek için biraz zaman ayıralım. Projede adlı PagingSortingDataListRepeateryeni 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
  • Paging.aspx
  • Sorting.aspx
  • SortingWithDefaultPaging.aspx
  • SortingWithCustomPaging.aspx

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

Şekil 1: Klasör Oluşturma PagingSortingDataListRepeater ve Öğretici ASP.NET Sayfaları Ekleme

Ardından sayfayı Default.aspx açın ve Kullanıcı Denetimi'ni SectionLevelTutorialListing.ascx klasörden UserControls Tasarım yüzeyine sürükleyin. Ana Sayfalar ve Site Gezintisi öğreticisinde oluşturduğumuz bu Kullanıcı Denetimi, site haritasını numaralandırır ve geçerli bölümdeki bu öğreticileri madde işaretli bir listede görüntüler.

SectionLevelTutorialListing.ascx Kullanıcı Denetimini Default.aspx ekleme

Şekil 2: Kullanıcı Denetimini ekleme SectionLevelTutorialListing.ascxDefault.aspx (Tam boyutlu görüntüyü görüntülemek için tıklayın)

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 DataList site eşleme düğümü işaretlemesiyle Düzenleme ve Silme'nin ardından aşağıdaki işaretlemeyi ekleyin:

<siteMapNode
    url="~/PagingSortingDataListRepeater/Default.aspx"
    title="Paging and Sorting with the DataList and Repeater"
    description="Paging and Sorting the Data in the DataList and Repeater Controls">
    <siteMapNode
        url="~/PagingSortingDataListRepeater/Paging.aspx"
        title="Paging"
        description="Learn how to page through the data shown
                     in the DataList and Repeater controls." />
    <siteMapNode
        url="~/PagingSortingDataListRepeater/Sorting.aspx"
        title="Sorting"
        description="Sort the data displayed in a DataList or
                     Repeater control." />
    <siteMapNode
        url="~/PagingSortingDataListRepeater/SortingWithDefaultPaging.aspx"
        title="Sorting with Default Paging"
        description="Create a DataList or Repeater control that is paged using
                     default paging and can be sorted." />
    <siteMapNode
        url="~/PagingSortingDataListRepeater/SortingWithCustomPaging.aspx"
        title="Sorting with Custom Paging"
        description="Learn how to sort the data displayed in a DataList or
                     Repeater control that uses custom paging." />
</siteMapNode>

Site Haritasını Yeni ASP.NET Sayfalarını Içerecek Şekilde Güncelleştirin

Şekil 3: Site Haritası'nı Yeni ASP.NET Sayfalarını Içerecek Şekilde Güncelleştirme

Sayfalama İncelemesi

Önceki öğreticilerde GridView, DetailsView ve FormView denetimlerindeki verileri nasıl sayfalandıracağımızı gördük. Bu üç denetim, yalnızca denetimin akıllı etiketindeki Disk Belleğini Etkinleştir seçeneği işaretlenerek uygulanabilen varsayılan disk belleği olarak adlandırılan basit bir sayfalama biçimi sunar. Varsayılan sayfalama ile, ilk sayfa ziyaretinde her veri sayfası istendiğinde veya kullanıcı GridView, DetailsView veya FormView denetimi farklı bir veri sayfasına gittiğinde ObjectDataSource'tan tüm verileri yeniden ister. Ardından istenen sayfa dizinine ve sayfa başına görüntülenecek kayıt sayısına göre görüntülenecek belirli kayıt kümesini çıkarır. Rapor Verilerini Sayfalama ve Sıralama öğreticisinde varsayılan sayfalama konusunu ayrıntılı olarak ele aldık.

Varsayılan disk belleği her sayfa için tüm kayıtları yeniden istediğinden, yeterince büyük miktarda veriyle disk belleği yapılırken pratik olmaz. Örneğin, sayfa boyutu 10 olan 50.000 kaydı sayfalandırmayı düşünün. Kullanıcı yeni bir sayfaya her geçtiğinde, yalnızca on tanesi görüntülense bile 50.000 kaydın tümü veritabanından alınmalıdır.

Özel disk belleği , istenen sayfada görüntülenecek kayıtların yalnızca kesin alt kümesini yakalayarak varsayılan disk belleğinin performans sorunlarını çözer. Özel disk belleği uygularken, yalnızca doğru kayıt kümesini verimli bir şekilde döndürecek SQL sorgusunu yazmamız gerekir. SQL Server 2005'in yeni ROW_NUMBER() anahtar sözcüğünü kullanarak böyle bir sorgunun nasıl oluşturulacağını Büyük Miktarlarda Veri Aracılığıyla Verimli Bir Şekilde Sayfalama öğreticisinde gördük.

DataList veya Repeater denetimlerinde varsayılan disk belleğini uygulamak için, sınıfını içeriğinin PagedDataSource sayfalandırıldığı çevresinde ProductsDataTable sarmalayıcı olarak kullanabiliriz. sınıfı, PagedDataSource herhangi bir numaralandırılabilir nesneye ve sayfa başına kaç kaydın ve PageSizeCurrentPageIndex geçerli sayfa dizinini göstereceğini gösteren özelliklere atanabilen bir DataSource özelliğe sahiptir. Bu özellikler ayarlandıktan sonra, PagedDataSource herhangi bir veri Web denetiminin veri kaynağı olarak kullanılabilir. PagedDataSourcenumaralandırıldığında, ve CurrentPageIndex özelliklerine göre PageSize yalnızca iç DataSource kayıtlarının uygun alt kümesini döndürür. Şekil 4'de sınıfın işlevselliği gösterilmektedir PagedDataSource .

PagedDataSource, Numaralandırılabilir Bir Nesneyi Sayfalanabilir Arabirimle Sarmalar

Şekil 4: Numaralandırılabilir PagedDataSource Nesneyi Sayfalanabilir Arabirimle Sarmalar

PagedDataSource Nesne doğrudan İş Mantığı Katmanı'ndan oluşturulup yapılandırılabilir ve bir ObjectDataSource aracılığıyla DataList veya Repeater'a bağlanabilir ya da doğrudan ASP.NET sayfasının arka kod arkası sınıfında oluşturulabilir ve yapılandırılabilir. İkinci yaklaşım kullanılırsa, ObjectDataSource'un kullanılmasına izin vermemiz ve bunun yerine disk belleği verilerini program aracılığıyla DataList veya Repeater'a bağlamamız gerekir.

Nesnenin PagedDataSource özel disk belleğini destekleyen özellikleri de vardır. Ancak, sınıfında görüntülenecek hassas kayıtları döndüren özel disk belleği için tasarlanmış BLL yöntemlerimiz ProductsBLL olduğundan özel disk belleği için kullanarak PagedDataSource atlayabiliriz.

Bu öğreticide, sınıfına uygun şekilde yapılandırılmış PagedDataSource bir nesne döndüren yeni bir yöntem ProductsBLL ekleyerek DataList'te varsayılan disk belleğini uygulamaya göz atacağız. Sonraki öğreticide özel disk belleğinin nasıl kullanılacağını göreceğiz.

2. Adım: İş Mantığı Katmanına Varsayılan Disk Belleği Yöntemi Ekleme

sınıfı ProductsBLL şu anda tüm ürün bilgilerini GetProducts() döndürmek için bir yönteme ve başlangıç dizininde GetProductsPaged(startRowIndex, maximumRows)belirli bir ürün alt kümesini döndürmek için bir yönteme sahiptir. Varsayılan sayfalama ile GridView, DetailsView ve FormView denetimleri tüm ürünleri almak için yöntemini kullanır GetProducts() , ardından yalnızca doğru kayıt alt kümesini görüntülemek için dahili olarak kullanır PagedDataSource . Bu işlevi DataList ve Repeater denetimleriyle çoğaltmak için BLL'de bu davranışı taklit eden yeni bir yöntem oluşturabiliriz.

adlı GetProductsAsPagedDataSource sınıfına ProductsBLL iki tamsayı giriş parametresi alan bir yöntem ekleyin:

  • pageIndex görüntülenecek sayfanın dizini, sıfırda dizine alınan ve
  • pageSize sayfa başına görüntülenecek kayıt sayısı.

GetProductsAsPagedDataSource , ' den GetProducts()tüm kayıtları alarak başlar. Ardından, ve özelliklerini geçirilen pageIndex ve pageSizePageSize parametrelerin değerlerine ayarlayarak CurrentPageIndex bir PagedDataSource nesne oluşturur. yöntemi, yapılandırılan PagedDataSourceşu döndürülerek sona erer:

<System.ComponentModel.DataObjectMethodAttribute _
    (System.ComponentModel.DataObjectMethodType.Select, False)> _
Public Function GetProductsAsPagedDataSource(ByVal pageIndex As Integer, _
    ByVal pageSize As Integer) As PagedDataSource
    ' Get ALL of the products
    Dim products As Northwind.ProductsDataTable = GetProducts()
    ' Limit the results through a PagedDataSource
    Dim pagedData As New PagedDataSource()
    pagedData.DataSource = products.Rows
    pagedData.AllowPaging = True
    pagedData.CurrentPageIndex = pageIndex
    pagedData.PageSize = pageSize
    Return pagedData
End Function

3. Adım: Varsayılan Sayfalama Kullanarak DataList'te Ürün Bilgilerini Görüntüleme

GetProductsAsPagedDataSource yöntemi sınıfına ProductsBLL eklendiğinde artık varsayılan sayfalama sağlayan bir DataList veya Repeater oluşturabiliriz. İlk olarak klasördeki PagingSortingDataListRepeater sayfayı Paging.aspx açın ve DataList özelliğini olarak ayarlayarak Araç Kutusu'ndan IDProductsDefaultPagingTasarım Aracı bir DataList sürükleyin. DataList'in akıllı etiketinden adlı ProductsDefaultPagingDataSource yeni bir ObjectDataSource oluşturun ve yöntemini kullanarak GetProductsAsPagedDataSource verileri alacak şekilde yapılandırın.

ObjectDataSource Oluşturma ve GetProductsAsPagedDataSource () Yöntemini Kullanacak Şekilde Yapılandırma

Şekil 5: ObjectDataSource Oluşturma ve Yöntemi Kullanacak GetProductsAsPagedDataSource() Şekilde Yapılandırma (Tam boyutlu görüntüyü görüntülemek için tıklayın)

UPDATE, INSERT ve DELETE sekmelerindeki açılan listeleri (Yok) olarak ayarlayın.

UPDATE, INSERT ve DELETE sekmelerindeki Drop-Down Listeler (Yok) olarak ayarlayın

Şekil 6: UPDATE, INSERT ve DELETE sekmelerindeki Drop-Down Listeler (Yok) olarak ayarlayın (Tam boyutlu görüntüyü görüntülemek için tıklayın)

GetProductsAsPagedDataSource yöntemi iki giriş parametresi beklediğinden sihirbaz bu parametre değerlerinin kaynağını sorar.

Geri göndermelerde sayfa dizini ve sayfa boyutu değerleri hatırlanmalıdır. Bunlar görünüm durumunda depolanabilir, sorgu dizesinde kalıcı hale getirilebilir, oturum değişkenlerinde depolanabilir veya başka bir teknik kullanılarak anımsanabilir. Bu öğreticide, belirli bir veri sayfasının yer işareti eklenmesine izin verme avantajına sahip querystring'i kullanacağız.

Özellikle ve parametreleri için pageIndexpageSize sırasıyla pageIndex ve pageSize sorgu dizesi alanlarını kullanın (bkz. Şekil 7). Bir kullanıcı bu sayfayı ilk kez ziyaret ettiğinde sorgu dizesi değerleri mevcut olmayacağından, bu parametreler için varsayılan değerleri ayarlamak için biraz zaman ayırın. için pageIndex, varsayılan değeri 0 (ilk veri sayfasını gösterir) ve pageSize varsayılan değeri 4 olarak ayarlayın.

PageIndex ve pageSize Parametreleri için Kaynak olarak QueryString kullanın

Şekil 7: ve pageSize Parametreleri için pageIndex Kaynak olarak QueryString'i kullanın (Tam boyutlu görüntüyü görüntülemek için tıklayın)

ObjectDataSource'ı yapılandırdıktan sonra Visual Studio, DataList için otomatik olarak bir ItemTemplate oluşturur. ItemTemplate öğesini özelleştirerek yalnızca ürünün adını, kategorisini ve tedarikçisini göstermesini sağlayın. Ayrıca DataList s RepeatColumns özelliğini 2, % Width 100 ve ItemStyle s Width değerini de %50 olarak ayarlayın. Bu genişlik ayarları iki sütun için eşit aralık sağlar.

Bu değişiklikleri yaptıktan sonra DataList ve ObjectDataSource işaretlemesi aşağıdakine benzer olmalıdır:

<asp:DataList ID="ProductsDefaultPaging" runat="server" Width="100%"
    DataKeyField="ProductID" DataSourceID="ProductsDefaultPagingDataSource"
    RepeatColumns="2" EnableViewState="False">
    <ItemTemplate>
        <h4><asp:Label ID="ProductNameLabel" runat="server"
            Text='<%# Eval("ProductName") %>'></asp:Label></h4>
        Category:
        <asp:Label ID="CategoryNameLabel" runat="server"
            Text='<%# Eval("CategoryName") %>'></asp:Label><br />
        Supplier:
        <asp:Label ID="SupplierNameLabel" runat="server"
            Text='<%# Eval("SupplierName") %>'></asp:Label><br />
        <br />
        <br />
    </ItemTemplate>
    <ItemStyle Width="50%" />
</asp:DataList>
<asp:ObjectDataSource ID="ProductsDefaultPagingDataSource" runat="server"
    OldValuesParameterFormatString="original_{0}" TypeName="ProductsBLL"
    SelectMethod="GetProductsAsPagedDataSource">
    <SelectParameters>
        <asp:QueryStringParameter DefaultValue="0" Name="pageIndex"
             QueryStringField="pageIndex" Type="Int32" />
        <asp:QueryStringParameter DefaultValue="4" Name="pageSize"
             QueryStringField="pageSize" Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>

Not

Bu öğreticide herhangi bir güncelleştirme veya silme işlevi gerçekleştirmediğimizden, işlenen sayfa boyutunu azaltmak için DataList görünüm durumunu devre dışı bırakabilirsiniz.

Bu sayfayı bir tarayıcı aracılığıyla ilk kez ziyaret ettiğinizde, pageIndex ne de pageSize querystring parametreleri sağlanmaz. Bu nedenle, varsayılan 0 ve 4 değerleri kullanılır. Şekil 8'de gösterildiği gibi bu, ilk dört ürünü görüntüleyen bir DataList ile sonuçlandı.

İlk Dört Ürün Listelenir

Şekil 8: İlk Dört Ürün Listelenir (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Disk belleği arabirimi olmadan, şu anda bir kullanıcının ikinci veri sayfasına gitmesinde kolay bir araç yoktur. 4. adımda bir disk belleği arabirimi oluşturacağız. Şimdilik, disk belleği yalnızca sorgu dizesinde disk belleği ölçütleri doğrudan belirtilerek gerçekleştirilebilir. Örneğin, ikinci sayfayı görüntülemek için tarayıcının Adres çubuğundaki URL'yi olarak Paging.aspx değiştirin ve Enter tuşuna Paging.aspx?pageIndex=2 basın. Bu, ikinci veri sayfasının görüntülenmesine neden olur (bkz. Şekil 9).

İkinci veri sayfasını gösteren DataList penceresindeki Verileri Sayfalama işleminin ekran görüntüsü.

Şekil 9: İkinci Veri Sayfası Görüntülenir (Tam boyutlu görüntüyü görüntülemek için tıklayın)

4. Adım: Disk Belleği ArabirimiNi Oluşturma

Uygulanabilecek çeşitli disk belleği arabirimleri vardır. GridView, DetailsView ve FormView denetimleri, aralarından seçim yapabileceğiniz dört farklı arabirim sağlar:

  • Ardından, önceki kullanıcılar bir kerede bir sayfayı bir sonrakine veya öncekine taşıyabilir.
  • Next, Previous, First, Last düğmelerinin yanı sıra Sonraki ve Önceki düğmelerine ek olarak, bu arabirim ilk veya çok son sayfaya gitmek için İlk ve Son düğmelerini içerir.
  • Sayısal , disk belleği arabirimindeki sayfa numaralarını listeler ve kullanıcının belirli bir sayfaya hızla atlayabilmesini sağlar.
  • Sayısal, İlk, Son sayısal sayfa numaralarına ek olarak, ilk veya çok son sayfaya gitme düğmeleri içerir.

DataList ve Repeater için bir disk belleği arabirimine karar vermek ve bunu uygulamak bizim sorumluluğumuz. Bu, sayfada gerekli Web denetimlerini oluşturmayı ve belirli bir disk belleği arabirimi düğmesine tıklandığında istenen sayfayı görüntülemeyi içerir. Ayrıca, bazı disk belleği arabirimi denetimlerinin devre dışı bırakılması gerekebilir. Örneğin, Sonraki, Önceki, İlk, Son arabirimini kullanarak verilerin ilk sayfasını görüntülerken, hem İlk hem de Önceki düğmeleri devre dışı bırakılır.

Bu öğretici için Next, Previous, First, Last arabirimini kullanalım. Sayfaya dört Düğme Web denetimi ekleyin ve bunların ID s FirstPagedeğerini , PrevPage, NextPageve LastPageolarak ayarlayın. Text Özellikleri << İlk, Önceki, < Sonraki >ve Son >> olarak ayarlayın.

<asp:Button runat="server" ID="FirstPage" Text="<< First" />
<asp:Button runat="server" ID="PrevPage" Text="< Prev" />
<asp:Button runat="server" ID="NextPage" Text="Next >" />
<asp:Button runat="server" ID="LastPage" Text="Last >>" />

Ardından, bu Düğmelerin her biri için bir Click olay işleyicisi oluşturun. Birazdan istenen sayfayı görüntülemek için gereken kodu ekleyeceğiz.

Sayfalanan Kayıtların Toplam Sayısını Anımsama

Seçilen disk belleği arabiriminden bağımsız olarak, sayfalanan kayıtların toplam sayısını hesaplamamız ve hatırlamamız gerekir. Toplam satır sayısı (sayfa boyutuyla birlikte), sayfalandırma arabirimi denetimlerinin eklendiğini veya etkinleştirildiğini belirleyen toplam veri sayfalarının sayısını belirler. Oluşturmakta olduğumuz Next, Previous, First, Last arabiriminde sayfa sayısı iki şekilde kullanılır:

  • Son sayfayı görüntüleyip görüntüleyemeyeceğimizi belirlemek için, bu durumda İleri ve Son düğmeleri devre dışı bırakılır.
  • Kullanıcı Son düğmesine tıklarsa, dizini sayfa sayısının bir altında olan son sayfaya tıklamamız gerekir.

Sayfa sayısı, toplam satır sayısının sayfa boyutuna bölünmesinin tavanı olarak hesaplanır. Örneğin, sayfa başına dört kayıt içeren 79 kayıtta sayfalama yapıyoruz, sayfa sayısı 20'dir (79 / 4'ün tavanı). Sayısal sayfalama arabirimini kullanıyorsak, bu bilgiler kaç tane sayısal sayfa düğmesi görüntüleneceği konusunda bizi bilgilendirmektedir; Disk belleği arabirimimizde Sonraki veya Son düğmeleri varsa, sonraki veya son düğmelerin ne zaman devre dışı bırakılabileceğini belirlemek için sayfa sayısı kullanılır.

Disk belleği arabirimi bir Son düğmesi içeriyorsa, son düğmeye tıklandığında son sayfa dizinini belirleyebilmemiz için, sayfalandırılan toplam kayıt sayısının geri göndermeler arasında hatırlanması zorunludur. Bunu kolaylaştırmak için, ASP.NET sayfasının code-behind sınıfında değerini durumunu görüntülemek üzere kalıcı hale getiren bir TotalRowCount özellik oluşturun:

Private Property TotalRowCount() As Integer
    Get
        Dim o As Object = ViewState("TotalRowCount")
        If (o Is Nothing) Then
            Return -1
        Else
            Return Convert.ToInt32(o)
        End If
    End Get
    set(Value as Integer)
        ViewState("TotalRowCount") = value
    End Set
End Property

'a TotalRowCountek olarak, sayfa dizinine, sayfa boyutuna ve sayfa sayımına kolayca erişmek için salt okunur sayfa düzeyi özellikleri oluşturmak için bir dakika bekleyin:

Private ReadOnly Property PageIndex() As Integer
    Get
        If (Not String.IsNullOrEmpty(Request.QueryString("pageIndex"))) Then
            Return Convert.ToInt32(Request.QueryString("pageIndex"))
        Else
            Return 0
        End If
    End Get
End Property
Private ReadOnly Property PageSize() As Integer
    Get
        If (Not String.IsNullOrEmpty(Request.QueryString("pageSize"))) Then
            Return Convert.ToInt32(Request.QueryString("pageSize"))
        Else
            Return 4
        End If
    End Get
End Property
Private ReadOnly Property PageCount() As Integer
    Get
        If TotalRowCount <= 0 OrElse PageSize <= 0 Then
            Return 1
        Else
            Return ((TotalRowCount + PageSize) - 1) / PageSize
        End If
    End Get
End Property

Sayfalanan Kayıtların Toplam Sayısını Belirleme

PagedDataSource ObjectDataSource yönteminden döndürülen nesne, DataList'te Select() yalnızca bir alt kümesi görüntülense bile tüm ürün kayıtlarının içinde yer alır. PagedDataSource s Count özelliği yalnızca DataList içinde görüntülenecek öğe sayısını döndürür; DataSourceCount özelliği içindeki PagedDataSourceöğelerin toplam sayısını döndürür. Bu nedenle, ASP.NET sayfa s özelliğini s TotalRowCountDataSourceCount özelliğinin PagedDataSource değerini atamamız gerekir.

Bunu gerçekleştirmek için ObjectDataSource Selected olayı için bir olay işleyicisi oluşturun. Olay işleyicisinde Selected , bu örnekte ObjectDataSource Select() yönteminin dönüş değerine erişimimiz vardır PagedDataSource.

Protected Sub ProductsDefaultPagingDataSource_Selected(ByVal sender As Object, _
    ByVal e As System.Web.UI.WebControls.ObjectDataSourceStatusEventArgs) _
    Handles ProductsDefaultPagingDataSource.Selected
    ' Reference the PagedDataSource bound to the DataList
    Dim pagedData As PagedDataSource = CType(e.ReturnValue, PagedDataSource)
    ' Remember the total number of records being paged through across postbacks
    TotalRowCount = pagedData.DataSourceCount
End Sub

İstenen Veri Sayfasını Görüntüleme

Kullanıcı disk belleği arabirimindeki düğmelerden birine tıkladığında istenen veri sayfasını görüntülememiz gerekir. Disk belleği parametreleri querystring aracılığıyla belirtildiğinden, kullanıcının tarayıcısının sayfayı uygun disk belleği parametreleriyle yeniden istemesi Paging.aspx için istenen veri sayfasını Response.Redirect(url) göstermek için kullanılır. Örneğin, ikinci veri sayfasını görüntülemek için kullanıcıyı adresine Paging.aspx?pageIndex=1yönlendirebiliriz.

Bunu kolaylaştırmak için kullanıcıyı adresine yönlendiren Paging.aspx?pageIndex=sendUserToPageIndexbir RedirectUser(sendUserToPageIndex) yöntem oluşturun. Ardından, dört Button Click olay işleyicisinden bu yöntemi çağırın. Olay işleyicisinde, ilk sayfaya göndermek için çağrısı yapın; olay işleyicisinde PrevPageClick sayfa dizini olarak kullanınPageIndex - 1; vb.RedirectUser(0)FirstPageClick

Protected Sub FirstPage_Click(ByVal sender As Object, ByVal e As EventArgs) _
    Handles FirstPage.Click
    ' Send the user to the first page
    RedirectUser(0)
End Sub
Protected Sub PrevPage_Click(ByVal sender As Object, ByVal e As EventArgs) _
    Handles PrevPage.Click
    ' Send the user to the previous page
    RedirectUser(PageIndex - 1)
End Sub
Protected Sub NextPage_Click(ByVal sender As Object, ByVal e As EventArgs) _
    Handles NextPage.Click
    ' Send the user to the next page
    RedirectUser(PageIndex + 1)
End Sub
Protected Sub LastPage_Click(ByVal sender As Object, ByVal e As EventArgs) _
    Handles LastPage.Click
    ' Send the user to the last page
    RedirectUser(PageCount - 1)
End Sub
Private Sub RedirectUser(ByVal sendUserToPageIndex As Integer)
    ' Send the user to the requested page
    Response.Redirect(String.Format("Paging.aspx?pageIndex={0}&pageSize={1}", _
        sendUserToPageIndex, PageSize))
End Sub

Click Olay işleyicileri tamamlandığında, DataList kayıtları düğmelere tıklanarak sayfalanabilir. Denemek için biraz zaman ayırın!

Disk Belleği Arabirim Denetimlerini Devre Dışı Bırakma

Şu anda, görüntülenen sayfadan bağımsız olarak dört düğme de etkinleştirilmiştir. Ancak, verilerin ilk sayfasını gösterirken İlk ve Önceki düğmelerini ve son sayfayı gösterirken İleri ve Son düğmelerini devre dışı bırakmak istiyoruz. PagedDataSource ObjectDataSource Select() yöntemi tarafından döndürülen nesnenin özellikleri IsFirstPage vardır ve IsLastPage verilerin ilk veya son sayfasını görüntüleyip görüntülemediğimize karar vermek için inceleyebiliriz.

ObjectDataSource Selected olay işleyicisine aşağıdakileri ekleyin:

' Configure the paging interface based on the data in the PagedDataSource
FirstPage.Enabled = Not pagedData.IsFirstPage
PrevPage.Enabled = Not pagedData.IsFirstPage
NextPage.Enabled = Not pagedData.IsLastPage
LastPage.Enabled = Not pagedData.IsLastPage

Bu eklemeyle, ilk sayfa görüntülenirken İlk ve Önceki düğmeleri devre dışı bırakılırken, son sayfa görüntülenirken İleri ve Son düğmeleri devre dışı bırakılır.

Kullanıcıya şu anda hangi sayfayı görüntülediklerini ve toplam sayfa sayısını bildirerek disk belleği arabirimini tamamlayalım. Sayfaya bir Etiket Web denetimi ekleyin ve özelliğini olarak CurrentPageNumberayarlayınID. Text ObjectDataSource'un Selected olay işleyicisindeki özelliğini, görüntülenen geçerli sayfayı () ve toplam sayfa sayısını (PageIndex + 1PageCount) kapsayan şekilde ayarlayın.

' Display the current page being viewed...
CurrentPageNumber.Text = String.Format("You are viewing page {0} of {1}...", _
    PageIndex + 1, PageCount)

Şekil 10'da ilk ziyaret edildiğinde gösterilmektedir Paging.aspx . Querystring boş olduğundan DataList varsayılan olarak ilk dört ürünü gösterir; İlk ve Önceki düğmeleri devre dışı bırakılır. İleri'ye tıklanması sonraki dört kaydı görüntüler (bkz. Şekil 11); İlk ve Önceki düğmeleri artık etkindir.

Verilerin İlk Sayfası Görüntülenir

Şekil 10: Verilerin İlk Sayfası Görüntülenir (Tam boyutlu görüntüyü görüntülemek için tıklayın)

DataList penceresinde Disk Belleği Verilerinin 2. sayfasını gösteren ekran görüntüsü.

Şekil 11: İkinci Veri Sayfası Görüntülenir (Tam boyutlu görüntüyü görüntülemek için tıklayın)

Not

Disk belleği arabirimi, kullanıcının sayfa başına kaç sayfa görüntüleneceğini belirtmesine izin vererek daha da geliştirilebilir. Örneğin, 5, 10, 25, 50 ve Tümü gibi sayfa boyutu seçeneklerini listeleyen bir DropDownList eklenebilir. Bir sayfa boyutu seçtikten sonra kullanıcının sayfasına yeniden Paging.aspx?pageIndex=0&pageSize=selectedPageSizeyönlendirilmesi gerekir. Bu geliştirmeyi okuyucu için bir alıştırma olarak uygulamaya bırakıyorum.

Özel Disk Belleği Kullanma

DataList, verimsiz varsayılan sayfalama tekniğini kullanarak verilerinde sayfa oluşturur. Yeterince büyük miktarda veride disk belleği yaparken, özel disk belleğinin kullanılması zorunludur. Uygulama ayrıntıları biraz farklı olsa da, DataList'te özel disk belleği uygulamanın arkasındaki kavramlar varsayılan sayfalama ile aynıdır. Özel disk belleği ile sınıfın ProductBLLGetProductsPaged yöntemini kullanın (yerine GetProductsAsPagedDataSource). Büyük Miktarlarda Veri Üzerinden Verimli Sayfalama öğreticisinde açıklandığı gibi, GetProductsPaged başlangıç satırı dizini ve döndürülecek en fazla satır sayısı geçirilmelidir. Bu parametreler, varsayılan disk belleğinde kullanılan ve pageSize parametreleri gibi pageIndex querystring aracılığıyla korunabilir.

Özel sayfalamada yok PagedDataSource olduğundan, çağrılmakta olan kayıtların toplam sayısını ve verilerin ilk veya son sayfasını görüntüleyip görüntüleyemeyeceğimizi belirlemek için alternatif teknikler kullanılmalıdır. TotalNumberOfProducts() sınıfındaki ProductsBLL yöntemi, sayfalanan ürünlerin toplam sayısını döndürür. Verilerin ilk sayfasının görüntülenip görüntülenmediğini belirlemek için, sıfırsa başlangıç satırı dizinini inceleyin, ardından ilk sayfa görüntüleniyor demektir. Başlangıç satırı dizini artı döndürülecek en fazla satır sayısı, sayfalandırılan toplam kayıt sayısından büyük veya buna eşitse, son sayfa görüntülenir.

Sonraki öğreticide özel disk belleği uygulamayı daha ayrıntılı bir şekilde inceleyeceğiz.

Özet

Ne DataList ne de Repeater GridView, DetailsView ve FormView denetimlerinde bulunan kullanıma hazır disk belleği desteği sunmasa da, bu tür işlevler en az çabayla eklenebilir. Varsayılan disk belleğini uygulamanın en kolay yolu, içindeki tüm ürün PagedDataSource kümesini sarmalayıp datalist veya repeater'a bağlamaktır PagedDataSource . Bu öğreticide sınıfına GetProductsAsPagedDataSourceProductsBLL öğesini döndürmek için yöntemini ekledik PagedDataSource. ProductsBLL sınıfı, özel disk belleği GetProductsPaged ve TotalNumberOfProductsiçin gereken yöntemleri zaten içerir.

Özel disk belleği için görüntülenecek kesin kayıt kümesini veya varsayılan disk belleği için içindeki PagedDataSource tüm kayıtları almanın yanı sıra, disk belleği arabirimini de el ile eklememiz gerekir. Bu öğretici için dört Düğme Web denetimine sahip bir Sonraki, Önceki, İlk, Son arabirimini oluşturduk. Ayrıca, geçerli sayfa numarasını ve toplam sayfa sayısını gösteren bir Etiket denetimi eklendi.

Sonraki öğreticide DataList ve Repeater'a sıralama desteği eklemeyi öğreneceksiniz. Ayrıca hem sayfalandırılabilir hem de sıralanabilen bir DataList oluşturmayı da göreceğiz (varsayılan ve özel sayfalama kullanan örneklerle).

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ışmaktadır. Son kitabı Sams Teach Yourself ASP.NET 24 Saat içinde 2.0. Adresine adresinden veya adresinden ulaşabileceğiniz http://ScottOnWriting.NETblogu aracılığıyla ulaşabilirsinizmitchell@4GuysFromRolla.com.

Özel Teşekkürler

Bu öğretici serisi birçok yararlı gözden geçiren tarafından gözden geçirildi. Bu öğreticinin baş gözden geçirenleri Liz Shulok, Ken Pespisa ve Bernadette Leigh oldu. Yaklaşan MSDN makalelerimi gözden geçirmek istiyor musunuz? Öyleyse, bana bir satır mitchell@4GuysFromRolla.combırakın.