Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Scott Mitchell
I když dataList ani repeater nenabízí podporu automatického stránkování nebo řazení, tento kurz ukazuje, jak přidat podporu stránkování do dataListu nebo Repeateru, což umožňuje mnohem flexibilnější stránkování a rozhraní zobrazení dat.
Úvod
Stránkování a řazení jsou dvě velmi běžné funkce při zobrazení dat v online aplikaci. Například při hledání ASP.NET knih v online knihkupectví může existovat stovky takových knih, ale sestava se seznamem výsledků hledání obsahuje pouze deset shod na stránku. Kromě toho je možné výsledky řadit podle názvu, ceny, počtu stránek, jména autora atd. Jak jsme probrali v kurzu stránkování a řazení dat sestavy, ovládací prvky GridView, DetailsView a FormView poskytují integrovanou podporu stránkování, kterou je možné povolit na zaškrtávacím políčka. GridView také zahrnuje podporu řazení.
DataList ani Repeater bohužel nenabízí podporu automatického stránkování ani řazení. V tomto kurzu se podíváme, jak přidat podporu stránkování do dataListu nebo Repeateru. Musíme ručně vytvořit stránkovací rozhraní, zobrazit odpovídající stránku záznamů a pamatovat si navštívenou stránku napříč postbacky. I když to trvá více času a kódu než u GridView, DetailsView nebo FormView, DataList a Repeater umožňují mnohem flexibilnější stránkování a rozhraní zobrazení dat.
Poznámka:
Tento kurz se zaměřuje výhradně na stránkování. V dalším kurzu se podíváme na přidání možností řazení.
Krok 1: Přidání webových stránek pro stránkování a řazení kurzů
Než začneme s tímto kurzem, zabereme chvilku a přidáme ASP.NET stránky, které budeme potřebovat pro tento kurz a další. Začněte vytvořením nové složky v projektu s názvem PagingSortingDataListRepeater
. Dále přidejte do této složky následující pět ASP.NET stránek, přičemž všechny z nich jsou nakonfigurované tak, aby používaly stránku Site.master
předlohy:
Default.aspx
Paging.aspx
Sorting.aspx
SortingWithDefaultPaging.aspx
SortingWithCustomPaging.aspx
Obrázek 1: Vytvoření PagingSortingDataListRepeater
složky a přidání ASP.NET stránek kurzu
Dále otevřete Default.aspx
stránku a přetáhněte SectionLevelTutorialListing.ascx
uživatelský ovládací prvek ze UserControls
složky na návrhovou plochu. Tento uživatelský ovládací prvek, který jsme vytvořili v kurzu Stránky předlohy a Navigace na webu, vytvoří výčet mapy webu a zobrazí tyto kurzy v aktuálním oddílu v seznamu s odrážkami.
Obrázek 2: Přidání SectionLevelTutorialListing.ascx
uživatelského ovládacího prvku do Default.aspx
(kliknutím zobrazíte obrázek v plné velikosti)
Aby se v seznamu s odrážkami zobrazily kurzy stránkování a řazení, které budeme vytvářet, musíme je přidat do mapy webu. Web.sitemap
Otevřete soubor a přidejte následující kód za úpravy a odstranění pomocí kódu uzlu mapování webu DataList:
<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>
Obrázek 3: Aktualizace mapy webu tak, aby zahrnovala nové stránky ASP.NET
Revize stránkování
V předchozích kurzech jsme viděli, jak procházet data v ovládacích prvcích GridView, DetailsView a FormView. Tyto tři ovládací prvky nabízejí jednoduchou formu stránkování označované jako výchozí stránkování , které lze implementovat jednoduše tak, že v inteligentní značce ovládacího prvku zaškrtnete možnost Povolit stránkování. Při výchozím stránkování se při každém vyžádání stránky dat buď na první stránce navštíví, nebo když uživatel přejde na jinou stránku dat, ovládací prvek GridView, DetailsView nebo FormView znovu vyžádá všechna data z ObjectDataSource. Potom vyndá určitou sadu záznamů, která se zobrazí vzhledem k požadovanému indexu stránky a počtu záznamů, které se mají zobrazit na stránce. V kurzu Stránkování a řazení dat sestavy jsme podrobně probrali výchozí stránkování.
Vzhledem k tomu, že výchozí stránkování znovu vyžaduje všechny záznamy pro každou stránku, není při stránkování dostatečně velkých objemů dat praktické. Představte si například stránkování až 50 000 záznamů s velikostí stránky 10. Pokaždé, když se uživatel přesune na novou stránku, musí se z databáze načíst všech 50 000 záznamů, i když se zobrazí jenom deset z nich.
Vlastní stránkování řeší problémy s výkonem výchozího stránkování tak, že vezme jenom přesnou podmnožinu záznamů, která se zobrazí na požadované stránce. Při implementaci vlastního stránkování musíme napsat dotaz SQL, který efektivně vrátí pouze správnou sadu záznamů. Viděli jsme, jak takový dotaz vytvořit pomocí nového ROW_NUMBER()
klíčového slova SQL Serveru 2005 s zpět v kurzu Efektivní stránkování velkých objemů dat .
K implementaci výchozího stránkování v ovládacích prvcích DataList nebo Repeater můžeme třídu použít PagedDataSource
jako obálku kolem ProductsDataTable
toho, jejíž obsah se stránkuje. Třída PagedDataSource
má DataSource
vlastnost, která může být přiřazena k libovolnému výčtu objektu a PageSize
vlastnosti CurrentPageIndex
, které označují, kolik záznamů se má zobrazit na stránce a aktuální index stránky. Jakmile jsou tyto vlastnosti nastaveny, PagedDataSource
lze jej použít jako zdroj dat libovolného ovládacího prvku data Web. Při PagedDataSource
výčtu vrátí pouze odpovídající podmnožinu záznamů jeho vnitřních DataSource
na PageSize
základě vlastností a CurrentPageIndex
vlastností. Obrázek 4 znázorňuje funkčnost PagedDataSource
třídy.
Obrázek 4: Obtékání PagedDataSource
výčtového objektu pomocí stránkovatelného rozhraní
Objekt PagedDataSource
lze vytvořit a nakonfigurovat přímo z vrstvy obchodní logiky a vázat se na DataList nebo Repeater prostřednictvím ObjectDataSource, nebo lze vytvořit a nakonfigurovat přímo na stránce ASP.NET kód za třídou. Pokud se použije druhý přístup, musíme použít ObjectDataSource a místo toho svázat stránkovaná data s DataList nebo Repeater programově.
Objekt PagedDataSource
má také vlastnosti pro podporu vlastního stránkování. Můžeme ale obejít použití vlastního PagedDataSource
stránkování, protože ve třídě už máme metody ProductsBLL
BLL navržené pro vlastní stránkování, které vracejí přesné záznamy k zobrazení.
V tomto kurzu se podíváme na implementaci výchozího stránkování v objektu DataList přidáním nové metody do ProductsBLL
třídy, která vrací správně nakonfigurovaný PagedDataSource
objekt. V dalším kurzu se dozvíte, jak používat vlastní stránkování.
Krok 2: Přidání výchozí metody stránkování ve vrstvě obchodní logiky
Třída ProductsBLL
v současné době má metodu pro vrácení všech informací o GetProducts()
produktu a jeden pro vrácení určité podmnožina produktů na počáteční index GetProductsPaged(startRowIndex, maximumRows)
. Při výchozím stránkování ovládací prvky GridView, DetailsView a FormView používají metodu GetProducts()
k načtení všech produktů, ale pak interně PagedDataSource
zobrazit pouze správnou podmnožinu záznamů. Abychom mohli tuto funkci replikovat pomocí ovládacích prvků DataList a Repeater, můžeme vytvořit novou metodu v BLL, která napodobuje toto chování.
Přidejte metodu ProductsBLL
do třídy s názvem GetProductsAsPagedDataSource
, která přebírá dva celočíselné vstupní parametry:
pageIndex
index stránky, který se má zobrazit, indexovaný na nule apageSize
počet záznamů, které se mají zobrazit na stránce.
GetProductsAsPagedDataSource
spustí načtením všech záznamů z GetProducts()
. Potom vytvoří PagedDataSource
objekt, nastaví jeho CurrentPageIndex
a PageSize
vlastnosti na hodnoty předaných pageIndex
parametrů a pageSize
parametrů. Metoda končí vrácením tohoto nakonfigurovaného PagedDataSource
:
<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
Krok 3: Zobrazení informací o produktu v datovém seznamu pomocí výchozího stránkování
S metodou přidanou GetProductsAsPagedDataSource
ProductsBLL
do třídy teď můžeme vytvořit DataList nebo Repeater, který poskytuje výchozí stránkování. Začněte otevřením Paging.aspx
stránky ve PagingSortingDataListRepeater
složce a přetažením dataList z panelu nástrojů do Návrháře a nastavením vlastnosti DataList s ID
na ProductsDefaultPaging
hodnotu . Z inteligentní značky DataList vytvořte nový ObjectDataSource s názvem ProductsDefaultPagingDataSource
a nakonfigurujte ho tak, aby načítal data pomocí GetProductsAsPagedDataSource
metody.
Obrázek 5: Vytvoření objektu ObjectDataSource a jeho konfigurace pro použití GetProductsAsPagedDataSource
()
metody (kliknutím zobrazíte obrázek v plné velikosti)
Nastavte rozevírací seznamy na kartách UPDATE, INSERT a DELETE na (Žádné).
Obrázek 6: Nastavení rozevíracích seznamů na kartách UPDATE, INSERT a DELETE na (Žádné) (Kliknutím zobrazíte obrázek v plné velikosti)
Vzhledem k tomu, že GetProductsAsPagedDataSource
metoda očekává dva vstupní parametry, průvodce nás vyzve k zadání zdroje těchto hodnot parametrů.
Index stránky a hodnoty velikosti stránky musí být zapamatováno napříč postbacky. Mohou být uloženy ve stavu zobrazení, trvalé do řetězce dotazu, uloženy v proměnných relací nebo zapamatovány pomocí některé jiné techniky. V tomto kurzu použijeme řetězec dotazu, který má výhodu povolení záložky konkrétní stránky dat.
Konkrétně použijte pole řetězce dotazu pageIndex a pageSize pro pageIndex
parametry a pageSize
parametry (viz obrázek 7). Chvíli počkejte, než nastavíte výchozí hodnoty těchto parametrů, protože hodnoty řetězce dotazu nebudou k dispozici, když uživatel poprvé navštíví tuto stránku. Pro pageIndex
, nastavte výchozí hodnotu na 0 (která zobrazí první stránku dat) a pageSize
s výchozí hodnotou 4.
Obrázek 7: Použití řetězce dotazu jako zdroje a pageIndex
pageSize
parametrů (kliknutím zobrazíte obrázek s plnou velikostí)
Po nakonfigurování ObjectDataSource visual Studio automaticky vytvoří ItemTemplate
pro DataList. ItemTemplate
Přizpůsobte si jenom název produktu, kategorii a dodavatele. Nastavte vlastnost DataList RepeatColumns
na hodnotu 2, jeho Width
na 100 % a její ItemStyle
hodnota Width
je 50 %. Tato nastavení šířky budou poskytovat stejné mezery pro dva sloupce.
Po provedení těchto změn by měl kód DataList a ObjectDataSource vypadat podobně jako následující:
<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>
Poznámka:
Vzhledem k tomu, že v tomto kurzu neprovádíme žádné funkce aktualizace nebo odstranění, můžete zakázat stav zobrazení DataList a zmenšit tak velikost vykreslené stránky.
Při počáteční návštěvě této stránky prostřednictvím prohlížeče pageIndex
pageSize
nejsou k dispozici parametry ani parametry řetězce dotazu. Proto se používají výchozí hodnoty 0 a 4. Jak ukazuje obrázek 8, výsledkem je seznam Dat, který zobrazuje první čtyři produkty.
Obrázek 8: Zobrazí se první čtyři produkty (kliknutím zobrazíte obrázek s plnou velikostí).
Bez stránkovacího rozhraní aktuálně neexistuje žádný jednoduchý způsob, jak uživatel přejít na druhou stránku dat. V kroku 4 vytvoříme stránkovací rozhraní. Prozatím je však možné stránkování provést pouze tak, že v řetězci dotazu zadáte přímo kritéria stránkování. Pokud chcete například zobrazit druhou stránku, změňte adresu URL v adresní řádku prohlížeče na Paging.aspx
Paging.aspx?pageIndex=2
a stiskněte Enter. To způsobí zobrazení druhé stránky dat (viz obrázek 9).
Obrázek 9: Zobrazí se druhá stránka dat (kliknutím zobrazíte obrázek v plné velikosti).
Krok 4: Vytvoření stránkovacího rozhraní
Existuje celá řada různých stránkovacích rozhraní, která je možné implementovat. Ovládací prvky GridView, DetailsView a FormView poskytují čtyři různá rozhraní, která si můžete vybrat z následujících možností:
- V dalším kroku můžou předchozí uživatelé přesunout jednu stránku na další nebo předchozí stránku.
- Next, Previous, First, Last kromě tlačítek Další a Předchozí, toto rozhraní obsahuje tlačítka First a Last pro přechod na úplně první nebo úplně poslední stránku.
- Číselná čísla stránek jsou uvedena ve stránkovacím rozhraní, což uživateli umožňuje rychle přejít na konkrétní stránku.
- Číselná, první, poslední kromě čísel čísel čísel stránek obsahuje tlačítka pro přechod na první nebo úplně poslední stránku.
Pro DataList a Repeater zodpovídáme za rozhodování o stránkovacím rozhraní a jeho implementaci. To zahrnuje vytvoření potřebných webových ovládacích prvků na stránce a zobrazení požadované stránky při kliknutí na konkrétní tlačítko stránkovacího rozhraní. Kromě toho může být nutné zakázat určité ovládací prvky stránkovacího rozhraní. Například při zobrazení první stránky dat pomocí tlačítka Další, Předchozí, První, Poslední by byla zakázána tlačítka První i Předchozí.
V tomto kurzu použijeme rozhraní Další, Předchozí, První, Poslední. Přidejte na stránku čtyři webové ovládací prvky tlačítka a nastavte jejich ID
hodnoty na FirstPage
, PrevPage
, NextPage
a LastPage
. Text
Nastavte vlastnosti na << First, < Prev, Next >a Last >> .
<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 >>" />
Dále vytvořte obslužnou rutinu Click
události pro každou z těchto tlačítek. Za chvíli přidáme kód potřebný k zobrazení požadované stránky.
Zapamatování celkového počtu stránkovaných záznamů
Bez ohledu na vybrané stránkovací rozhraní musíme vypočítat a pamatovat si celkový počet stránkovaných záznamů. Celkový počet řádků (ve spojení s velikostí stránky) určuje, kolik stránek dat se stránkuje, což určuje, jaké ovládací prvky stránkovacího rozhraní jsou přidány nebo povoleny. V okně Další, Předchozí, První, Poslední rozhraní, které vytváříme, se počet stránek používá dvěma způsoby:
- Abychom zjistili, jestli se zobrazuje poslední stránka, v takovém případě jsou zakázána tlačítka Další a Poslední.
- Pokud uživatel klikne na tlačítko Poslední, musíme je vysouvat na poslední stránku, jejíž index je menší než počet stránek.
Počet stránek se vypočítá jako strop celkového počtu řádků vydělený velikostí stránky. Pokud například stránkujeme až 79 záznamů se čtyřmi záznamy na stránku, počet stránek je 20 (strop 79 / 4). Pokud používáme číselné stránkovací rozhraní, tyto informace nás informují o tom, kolik číselných tlačítek stránky se má zobrazit; Pokud naše stránkovací rozhraní obsahuje tlačítka Další nebo Poslední, použije se počet stránek k určení, kdy chcete zakázat tlačítka Další nebo Poslední.
Pokud stránkovací rozhraní obsahuje tlačítko Poslední, je nezbytné, aby celkový počet záznamů, které se stránkují, byly zapamatovány napříč postbacky, aby po kliknutí na poslední tlačítko bylo možné určit poslední index stránky. Chcete-li to usnadnit, vytvořte TotalRowCount
vlastnost na ASP.NET stránce s kódem třídy, která uchovává jeho hodnotu pro zobrazení stavu:
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
Kromě TotalRowCount
toho může trvat minutu, než vytvoříte vlastnosti na úrovni stránky jen pro čtení pro snadný přístup k indexu stránky, velikosti stránky a počtu stránek:
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
Určení celkového počtu stránkovaných záznamů
Objekt PagedDataSource
vrácený z ObjectDataSource s Select()
metoda má v sobě všechny záznamy produktu, i když se v DataListu zobrazí pouze podmnožina z nich. Vlastnost PagedDataSource
s Count
vrátí pouze počet položek, které budou zobrazeny v DataList; DataSourceCount
vlastnost vrátí celkový počet položek v rámci .PagedDataSource
Proto musíme přiřadit vlastnost stránky TotalRowCount
ASP.NET hodnotu PagedDataSource
vlastnosti.DataSourceCount
K tomu vytvořte obslužnou rutinu události pro událost ObjectDataSource Selected
. V obslužné rutině Selected
události máme přístup k návratové hodnotě ObjectDataSource s Select()
metoda v tomto případě , the 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
Zobrazení požadované stránky dat
Když uživatel klikne na jedno z tlačítek ve stránkovacím rozhraní, musíme zobrazit požadovanou stránku dat. Vzhledem k tomu, že parametry stránkování jsou zadány prostřednictvím řetězce dotazu, aby se zobrazila požadovaná stránka dat, Response.Redirect(url)
aby prohlížeč uživatele znovu požádal Paging.aspx
stránku s příslušnými parametry stránkování. Například pro zobrazení druhé stránky dat bychom přesměrováli uživatele na Paging.aspx?pageIndex=1
.
Chcete-li to usnadnit, vytvořte metodu RedirectUser(sendUserToPageIndex)
, která přesměruje uživatele na Paging.aspx?pageIndex=sendUserToPageIndex
. Pak volejte tuto metodu ze čtyř obslužných rutin událostí Button Click
. V obslužné rutině FirstPage
Click
události zavolejte RedirectUser(0)
, chcete-li je odeslat na první stránku; v obslužné rutině Click
PrevPage
události použijte PageIndex - 1
jako index stránky atd.
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
Po dokončení obslužných rutin událostí lze záznamy DataList s procházet kliknutím na tlačítka. Zkuste to ještě chvilku!
Zakázání ovládacích prvků stránkovacího rozhraní
V současné době jsou všechna čtyři tlačítka povolená bez ohledu na zobrazenou stránku. Chceme ale zakázat tlačítka První a Předchozí při zobrazení první stránky dat a tlačítka Další a Poslední při zobrazení poslední stránky. Objekt PagedDataSource
vrácený ObjectDataSource s Select()
metoda má vlastnosti IsFirstPage
a IsLastPage
můžeme prozkoumat, abychom zjistili, jestli si prohlížíme první nebo poslední stránku dat.
Do obslužné rutiny události ObjectDataSource Selected
přidejte následující:
' 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
Při tomto přidání budou při prohlížení první a předchozí stránky zakázána tlačítka První a Předchozí, zatímco při prohlížení poslední stránky budou zakázána tlačítka Další a Poslední.
Pojďme dokončit stránkovací rozhraní tím, že uživatele informuje, jakou stránku si právě prohlíží a kolik stránek celkem existuje. Přidejte na stránku ovládací prvek Label Web a nastavte jeho ID
vlastnost na CurrentPageNumber
. Nastavte jeho Text
vlastnost v ObjectDataSource s Selected událost obslužná rutina tak, aby zahrnovala aktuální stránku, která se zobrazuje (PageIndex + 1
) a celkový počet stránek (PageCount
).
' Display the current page being viewed...
CurrentPageNumber.Text = String.Format("You are viewing page {0} of {1}...", _
PageIndex + 1, PageCount)
Obrázek 10 ukazuje Paging.aspx
při prvním navštívení. Vzhledem k tomu, že je řetězec dotazu prázdný, dataList ve výchozím nastavení zobrazuje první čtyři produkty; Tlačítka První a Předchozí jsou zakázaná. Kliknutím na další zobrazíte další čtyři záznamy (viz obrázek 11); Tlačítka První a Předchozí jsou teď povolená.
Obrázek 10: Zobrazí se první stránka dat (kliknutím zobrazíte obrázek v plné velikosti).
Obrázek 11: Zobrazí se druhá stránka dat (kliknutím zobrazíte obrázek v plné velikosti).
Poznámka:
Stránkovací rozhraní lze dále vylepšit tím, že uživateli umožní určit, kolik stránek se má zobrazit na stránce. Například rozevírací seznam může být přidán výpis možností velikosti stránky, jako jsou 5, 10, 25, 50 a Vše. Při výběru velikosti stránky by uživatel muset být přesměrován zpět na Paging.aspx?pageIndex=0&pageSize=selectedPageSize
. Ponechám toto vylepšení jako cvičení pro čtenáře.
Použití vlastního stránkování
Stránky DataList procházejí svými daty pomocí neefektivní výchozí techniky stránkování. Při stránkování dostatečně velkými objemy dat je nezbytné použít vlastní stránkování. I když se podrobnosti implementace mírně liší, koncepty implementace vlastního stránkování v seznamu DataList jsou stejné jako u výchozího stránkování. Při vlastním stránkování použijte metodu ProductBLL
třídy GetProductsPaged
(místo GetProductsAsPagedDataSource
). Jak je popsáno v kurzu Efektivní stránkování prostřednictvím velkých objemů dat , GetProductsPaged
musí se předat index počátečního řádku a maximální počet řádků, které se mají vrátit. Tyto parametry je možné udržovat prostřednictvím řetězce dotazu stejně jako pageIndex
pageSize
parametry použité ve výchozím stránkování.
Vzhledem k tomu, že neexistuje žádný PagedDataSource
vlastní stránkování, je nutné použít alternativní techniky k určení celkového počtu stránkovaných záznamů a toho, jestli zobrazujeme první nebo poslední stránku dat. Metoda TotalNumberOfProducts()
ve ProductsBLL
třídě vrátí celkový počet produktů, které jsou stránkovány. Pokud chcete zjistit, jestli se zobrazuje první stránka dat, prozkoumejte počáteční index řádku, pokud je nulový, zobrazí se první stránka. Poslední stránka se zobrazí, pokud je index počátečního řádku plus maximální počet vrácených řádků větší nebo roven celkovému počtu stránkovaných záznamů.
V dalším kurzu prozkoumáme implementaci vlastního stránkování podrobněji.
Shrnutí
I když ovládací prvky DataList ani Repeater nenabízí podporu stránkování, která se nachází v ovládacích prvcích GridView, DetailsView a FormView, lze tyto funkce přidat s minimálním úsilím. Nejjednodušší způsob, jak implementovat výchozí stránkování, je zabalit celou sadu produktů v rámci a PagedDataSource
pak svázat PagedDataSource
dataList nebo Repeater. V tomto kurzu jsme přidali metodu GetProductsAsPagedDataSource
ProductsBLL
do třídy pro vrácení PagedDataSource
. Třída ProductsBLL
již obsahuje metody potřebné pro vlastní stránkování GetProductsPaged
a TotalNumberOfProducts
.
Kromě načtení přesné sady záznamů, které se mají zobrazit pro vlastní stránkování, nebo všechny záznamy ve PagedDataSource
výchozím stránkování, musíme také ručně přidat stránkovací rozhraní. Pro účely tohoto kurzu jsme vytvořili rozhraní Next, Previous, First, Last s čtyřmi ovládacími prvky Button Web. Byl přidán také ovládací prvek Popisek zobrazující aktuální číslo stránky a celkový počet stránek.
V dalším kurzu se dozvíte, jak přidat podporu řazení do DataListu a Repeateru. Ukážeme si také, jak vytvořit Seznam dat, který může být stránkovaný i seřazený (s příklady použití výchozího a vlastního stránkování).
Šťastné programování!
O autorovi
Scott Mitchell, autor sedmi knih ASP/ASP.NET a zakladatel 4GuysFromRolla.com, pracuje s webovými technologiemi Microsoftu od roku 1998. Scott pracuje jako nezávislý konzultant, trenér a spisovatel. Jeho nejnovější kniha je Sams Teach Yourself ASP.NET 2.0 za 24 hodin. Je dostupný na mitchell@4GuysFromRolla.comadrese . nebo prostřednictvím svého blogu, který lze najít na http://ScottOnWriting.NET.
Zvláštní díky
Tato série kurzů byla zkontrolována mnoha užitečnými recenzenty. Vedoucí hodnotící tohoto kurzu byli Liz Shulok, Ken Pespisa a Bernadette Leigh. Chcete si projít nadcházející články MSDN? Pokud ano, zahoďte mi řádek na mitchell@4GuysFromRolla.com.