DataList veya Repeater Denetiminde Rapor Verilerini Sayfalama (VB)
tarafından Scott Mitchell
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ı PagingSortingDataListRepeater
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
Paging.aspx
Sorting.aspx
SortingWithDefaultPaging.aspx
SortingWithCustomPaging.aspx
Ş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.
Şekil 2: Kullanıcı Denetimini ekleme SectionLevelTutorialListing.ascx
Default.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>
Ş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 PageSize
CurrentPageIndex
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. PagedDataSource
numaralandı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
.
Ş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 vepageSize
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 pageSize
PageSize
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 ID
ProductsDefaultPaging
Tasarı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.
Ş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.
Ş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 pageIndex
pageSize
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.
Ş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ı.
Ş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).
Ş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 FirstPage
değerini , PrevPage
, NextPage
ve LastPage
olarak 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 TotalRowCount
ek 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 TotalRowCount
DataSourceCount
ö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=1
yönlendirebiliriz.
Bunu kolaylaştırmak için kullanıcıyı adresine yönlendiren Paging.aspx?pageIndex=sendUserToPageIndex
bir 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 PrevPage
Click
sayfa dizini olarak kullanınPageIndex - 1
; vb.RedirectUser(0)
FirstPage
Click
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 CurrentPageNumber
ayarlayınID
. Text
ObjectDataSource'un Selected olay işleyicisindeki özelliğini, görüntülenen geçerli sayfayı () ve toplam sayfa sayısını (PageIndex + 1
PageCount
) 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.
Şekil 10: Verilerin İlk Sayfası Görüntülenir (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Ş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=selectedPageSize
yö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 ProductBLL
GetProductsPaged
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 GetProductsAsPagedDataSource
ProductsBLL
öğesini döndürmek için yöntemini ekledik PagedDataSource
. ProductsBLL
sınıfı, özel disk belleği GetProductsPaged
ve TotalNumberOfProducts
iç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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin