Stránkování dat sestavy ovládacími prvky DataList nebo Repeater (VB)
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 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í mohou existovat stovky takových knih, ale sestava s výsledky hledání uvádí pouze deset shod na stránku. Kromě toho je možné výsledky seř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 zaškrtnutím políčka. GridView také zahrnuje podporu řazení.
DataList ani Repeater bohužel nenabízí podporu automatického stránkování nebo ř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 příslušnou stránku záznamů a pamatovat si stránku, která je navštívena 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 zobrazení dat rozhraní.
Poznámka
Tento kurz se zaměřuje výhradně na stránkování. V dalším kurzu se budeme věnovat přidávání funkcí řazení.
Krok 1: Přidání webových stránek kurzu stránkování a řazení
Než začneme s tímto kurzem, pojďme nejdřív chvíli přidat 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 do této složky přidejte následujících pět ASP.NET stránek, které mají všechny 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
Pak 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 seznam s odrážkami zobrazoval kurzy stránkování a řazení, které budeme vytvářet, musíme je přidat do mapy webu. Web.sitemap
Otevřete soubor a za značku uzlu Upravit a odstranit pomocí mapování webu DataList přidejte následující kód:
<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
Kontrola 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čovanou jako výchozí stránkování , kterou lze implementovat jednoduše zaškrtnutím možnosti Povolit stránkování v inteligentní značce ovládacích prvků. Při výchozím stránkování je pokaždé, když je požadována stránka dat buď na první stránce, nebo když uživatel přejde na jinou stránku dat, ovládací prvek GridView, DetailsView nebo FormView znovu požádá o všechna data z ObjectDataSource. Poté vystřihl konkrétní sadu záznamů, které se mají zobrazit vzhledem k požadovanému indexu stránky, a počet záznamů, které se mají zobrazit na stránce. O výchozím stránkování jsme se podrobně bavili v kurzu Stránkování a řazení dat sestavy .
Vzhledem k tomu, že výchozí stránkování znovu vyžaduje všechny záznamy pro každou stránku, není to praktické při stránkování dostatečně velkých objemů dat. Představte si například stránkování přes 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 jich zobrazí jenom deset.
Vlastní stránkování řeší problémy s výkonem výchozího stránkování tím, že na požadované stránce vezme jenom přesnou podmnožinu záznamů. Při implementaci vlastního stránkování musíme napsat dotaz SQL, který efektivně vrátí jenom správnou sadu záznamů. V kurzu Efektivní stránkování velkých objemů dat jsme viděli, jak takový dotaz vytvořit pomocí nového ROW_NUMBER()
klíčového slova SQL Server 2005.
Chcete-li implementovat výchozí stránkování v ovládacích prvcích DataList nebo Repeater, můžeme použítPagedDataSource
třídu jako obálku ProductsDataTable
kolem obsahu, jehož obsah je stránkován. Třída PagedDataSource
má DataSource
vlastnost, kterou lze přiřadit k libovolnému objektu a PageSize
vlastnostem a CurrentPageIndex
vlastnostem, 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 použít jako zdroj dat libovolného datového webového ovládacího prvku. Při PagedDataSource
výčtu vrátí pouze odpovídající podmnožinu záznamů svého vnitřního DataSource
objektu na PageSize
základě vlastností a CurrentPageIndex
. Obrázek 4 znázorňuje funkčnost PagedDataSource
třídy.
Obrázek 4: Zalomí PagedDataSource
výčtový objekt s stránkovatelným rozhraním.
Objekt PagedDataSource
může být vytvořen a nakonfigurován přímo z vrstvy obchodní logiky a svázán s DataList nebo Repeater prostřednictvím ObjectDataSource, nebo může být vytvořen a nakonfigurován přímo v ASP.NET stránky s kód-na pozadí třídy. Pokud je použit druhý přístup, musíme opustit použití ObjectDataSource a místo toho vytvořit vazbu stránkovaných dat na DataList nebo Repeater programově.
Objekt PagedDataSource
má také vlastnosti pro podporu vlastního stránkování. Použití vlastního PagedDataSource
stránkování ale můžeme obejít, protože ve třídě již máme metody ProductsBLL
BLL určené pro vlastní stránkování, které vrací přesné záznamy, které se mají zobrazit.
V tomto kurzu se podíváme na implementaci výchozího stránkování v Seznamu dat 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
má v současné době metodu pro vrácení všech informací o GetProducts()
produktu a metodu pro vrácení konkrétní podmnožiny produktů na počátečním indexu 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ě použít PagedDataSource
k zobrazení pouze správné podmnožiny záznamů. Abychom mohli replikovat tuto funkci pomocí ovládacích prvků DataList a Repeater, můžeme v BLL vytvořit novou metodu, která toto chování napodobuje.
Do třídy přidejte metodu ProductsBLL
s názvem GetProductsAsPagedDataSource
, která přijímá 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
Začne načtením všech záznamů z GetProducts()
. Potom vytvoří PagedDataSource
objekt a nastaví jeho CurrentPageIndex
vlastnosti PageSize
na hodnoty předaných pageIndex
parametrů a pageSize
. Metoda končí tím, že vrátí toto nakonfigurované 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 seznamu DataList pomocí výchozího stránkování
S metodou GetProductsAsPagedDataSource
přidanou ProductsBLL
do třídy teď můžeme vytvořit DataList nebo Repeater, který poskytuje výchozí stránkování. Začněte tím, že Paging.aspx
otevřete stránku ve PagingSortingDataListRepeater
složce a přetáhnete DataList z panelu nástrojů do Designer a nastavíte vlastnost ProductsDefaultPaging
DataList na ID
. Z inteligentní značky DataList s vytvořte nový ObjectDataSource s názvem ProductsDefaultPagingDataSource
a nakonfigurujte ho GetProductsAsPagedDataSource
tak, aby načítal data pomocí 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í Drop-Down Seznamy 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ů.
Hodnoty indexu stránky a velikosti stránky se musí pamatovat napříč zpětnými operacemi. Je možné je uložit ve stavu zobrazení, uložit do řetězce dotazu, uložit do proměnných relace nebo si je zapamatovat pomocí jiné techniky. Pro účely tohoto kurzu použijeme řetězec dotazů, který má tu výhodu, že umožňuje záložku konkrétní stránky dat.
Pro parametry a pageSize
použijte konkrétně pole řetězce dotazu pageIndex a pageSize pageIndex
(viz obrázek 7). Chvíli nastavte výchozí hodnoty pro tyto parametry, protože hodnoty řetězce dotazů nebudou k dispozici, když uživatel poprvé navštíví tuto stránku. V případě pageIndex
nastavte výchozí hodnotu na 0 (která zobrazí první stránku dat) a pageSize
výchozí hodnotu na 4.
Obrázek 7: Použití řetězce dotazu jako zdroje pageIndex
parametrů a pageSize
(kliknutím zobrazíte obrázek v plné velikosti)
Po konfiguraci ObjectDataSource visual Studio automaticky vytvoří ItemTemplate
objekt pro DataList. Upravte ho ItemTemplate
tak, aby se zobrazoval jenom název produktu, kategorie a dodavatel. Nastavte také vlastnost DataList s RepeatColumns
na hodnotu 2, její Width
hodnotu na 100 % a hodnotu ItemStyle
s Width
na 50 %. Tato nastavení šířky zajistí stejné mezery pro oba sloupce.
Po provedení těchto změn by značky DataList a ObjectDataSource měly vypadat přibližně takto:
<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 ani odstraňování, můžete stav zobrazení DataList zakázat, abyste zmenšili velikost vykreslené stránky.
Při počáteční návštěvě této stránky v prohlížeči nejsou k dispozici ani pageIndex
parametry řetězce dotazu ani pageSize
. Proto se použijí 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: První čtyři produkty jsou uvedené (kliknutím zobrazíte obrázek v plné velikosti)
Bez stránkovacího rozhraní v současné době neexistuje jednoduchý způsob, jak uživatel přejít na druhou stránku dat. Stránkovací rozhraní vytvoříme v kroku 4. Prozatím je ale stránkování možné provést pouze tak, že v řetězci dotazu zadáte přímo kritéria stránkování. Pokud například chcete zobrazit druhou stránku, změňte adresu URL v adresní řádku prohlížeče z Paging.aspx
na Paging.aspx?pageIndex=2
a stiskněte Enter. To způsobí, že se zobrazí druhá stránka 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í, ze které si můžete vybrat:
- V dalším kroku můžou předchozí uživatelé přesouvat jednu stránku na další nebo předchozí stránku.
- Next, Previous, First, Last navíc k tlačítkům Další a Předchozí, toto rozhraní obsahuje první a poslední tlačítka pro přechod na úplně první nebo úplně poslední stránku.
- Číselný seznam čísel stránek ve stránkovacím rozhraní umožňuje uživateli rychle přejít na určitou stránku.
- Číselný, první, poslední kromě čísel stránek obsahuje tlačítka pro přechod na úplně první nebo úplně poslední stránku.
U datových seznamů DataList a Repeater zodpovídáme za rozhodnutí 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 tlačítko konkrétního stránkovacího rozhraní. Kromě toho může být nutné zakázat některé ovládací prvky stránkovacího rozhraní. Například při prohlížení první stránky dat pomocí rozhraní Další, Předchozí, První, Poslední by byla zakázána tlačítka První i Předchozí.
Pro účely tohoto kurzu použijeme rozhraní Next, Previous, First, Last. Přidejte na stránku čtyři webové ovládací prvky Button (Tlačítko) a nastavte jejich ID
hodnoty na FirstPage
, PrevPage
, NextPage
a LastPage
. Nastavte vlastnosti na Text
<< První, < Předchozí, Další >a Poslední >> .
<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ždé 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é rozhraní stránkování musíme vypočítat a zapamatovat si celkový počet stránkovaných záznamů. Celkový počet řádků (ve spojení s velikostí stránky) určuje celkový počet stránek dat, které jsou stránkovány, což určuje, které ovládací prvky stránkovacího rozhraní jsou přidány nebo jsou povoleny. V rozhraní Další, Předchozí, První, Poslední, které vytváříme, se počet stránek používá dvěma způsoby:
- Pokud chcete zjistit, jestli si prohlížíme poslední stránku, jsou tlačítka Další a Poslední zakázaná.
- Pokud uživatel klikne na tlačítko Poslední, musíme ho přesunout na poslední stránku, jejíž index je o jednu méně než počet stránek.
Počet stránek se počítá jako horní mez celkového počtu řádků dělený velikostí stránky. Pokud například stránkujeme 79 záznamů se čtyřmi záznamy na stránku, počet stránek je 20 (horní mez 79 / 4). Pokud používáme číselné stránkovací rozhraní, tyto informace nás informují o tom, kolik číselných stránek tlačítek k zobrazení; Pokud naše stránkovací rozhraní obsahuje tlačítka Další nebo Poslední, použije se počet stránek k určení, kdy zakázat tlačítka Další nebo Poslední.
Pokud stránkovací rozhraní obsahuje tlačítko Last, je nutné, aby se celkový počet stránkovaných záznamů zapamatoval napříč zpětnými operacemi, abychom po kliknutí na tlačítko Poslední mohli určit index poslední stránky. Pro usnadnění vytvořte TotalRowCount
vlastnost ve třídě kódu ASP.NET stránky, která uchovává svou 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ě nástroje TotalRowCount
chvíli trvá vytváření vlastností 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 záznamů procházejících stránkováním
Objekt PagedDataSource
vrácený metodou ObjectDataSource s Select()
obsahuje všechny záznamy produktu, i když se v DataList zobrazí pouze jejich podmnožina. Vlastnost PagedDataSource
s Count
vrátí pouze počet položek, které se zobrazí v objektu DataList; DataSourceCount
vlastnost vrátí celkový počet položek v rámci objektu PagedDataSource
. Proto musíme vlastnosti ASP.NET page s TotalRowCount
přiřadit hodnotu PagedDataSource
vlastnosti s DataSourceCount
.
Chcete-li toho dosáhnout, vytvořte obslužnou rutinu události objectDataSource události.Selected
V obslužné rutině Selected
události máme přístup k návratové hodnotě metody ObjectDataSource s Select()
, v tomto případě 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í se zadává prostřednictvím řetězce dotazu, použijte Response.Redirect(url)
k zobrazení požadované stránky dat příkaz , aby prohlížeč uživatele znovu požádal o Paging.aspx
stránku s příslušnými parametry stránkování. Pokud bychom například chtěli zobrazit druhou stránku dat, přesměrovali bychom uživatele na Paging.aspx?pageIndex=1
adresu .
Pokud to chcete usnadnit, vytvořte metodu RedirectUser(sendUserToPageIndex)
, která přesměruje uživatele na Paging.aspx?pageIndex=sendUserToPageIndex
. Pak zavolejte tuto metodu ze čtyř obslužných rutin událostí Button Click
. V obslužné rutině FirstPage
Click
události zavolejte RedirectUser(0)
, aby se odeslaly na první stránku, v PrevPage
Click
obslužné rutině 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. Udělejte si chvilku a vyzkoušejte to!
Zakázání ovládacích prvků stránkovacího rozhraní
V současné době jsou povolená všechna čtyři tlačítka 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ý metodou ObjectDataSource s Select()
má vlastnosti IsFirstPage
a IsLastPage
které můžeme prozkoumat, abychom zjistili, jestli se zobrazuje první nebo poslední stránka 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
Po tomto přidání budou tlačítka První a Předchozí při prohlížení první stránky zakázaná, zatímco tlačítka Další a Poslední budou při prohlížení poslední stránky zakázaná.
Dokončíme stránkovací rozhraní tím, že uživatele informujete, 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 obslužné rutině události ObjectDataSource s Selected tak, aby zahrnovala aktuální zobrazenou stránku (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í návštěvě. Vzhledem k tomu, že řetězec dotazu je 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íte určit, kolik stránek se má zobrazit na stránce. Můžete například přidat rozevírací seznam s možnostmi velikosti stránky, například 5, 10, 25, 50 a vše. Po výběru velikosti stránky bude potřeba uživatele přesměrovat zpět na Paging.aspx?pageIndex=0&pageSize=selectedPageSize
adresu . Implementaci tohoto vylepšení nechávám jako cvičení pro čtenáře.
Použití vlastního stránkování
DataList prochází svá data pomocí neefektivní výchozí techniky stránkování. Při stránkování dostatečně velkých objemů dat je nutné použít vlastní stránkování. Přestože se podrobnosti implementace mírně liší, koncepty implementace vlastního stránkování v objektu DataList jsou stejné jako u výchozího stránkování. U vlastního stránkování použijte metodu ProductBLL
třídy s GetProductsPaged
(místo GetProductsAsPagedDataSource
). Jak je popsáno v kurzu Efektivní stránkování velkých objemů dat , GetProductsPaged
musí být předán 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
parametry a pageSize
použité ve výchozím stránkování.
Vzhledem k tomu, že vlastní stránkování neexistuje PagedDataSource
, je nutné použít alternativní techniky k určení celkového počtu záznamů, které jsou stránkovány, 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, zkontrolujte index počátečního řádku, pokud je nulový, a pak se zobrazuje první stránka. Poslední stránka se zobrazí, pokud je index počátečního řádku plus maximální počet řádků, které se mají vrátit, větší nebo roven celkovému počtu stránkovaných záznamů.
Implementaci vlastního stránkování podrobněji prozkoumáme v dalším kurzu.
Souhrn
I když DataList ani Repeater nenabízí podporu stránkování, které se nachází v ovládacích prvcích GridView, DetailsView a FormView, takové funkce lze přidat s minimálním úsilím. Nejjednodušším způsobem, jak implementovat výchozí stránkování, je zabalit celou sadu produktů do objektu PagedDataSource
a pak svázat PagedDataSource
s objektem DataList nebo Repeater. V tomto kurzu jsme do třídy přidali metodu GetProductsAsPagedDataSource
ProductsBLL
, která vrací PagedDataSource
. Třída ProductsBLL
již obsahuje metody potřebné pro vlastní stránkování GetProductsPaged
a TotalNumberOfProducts
.
Spolu s načtením buď přesné sady záznamů, které se mají zobrazit pro vlastní stránkování, nebo všech záznamů v PagedDataSource
souboru pro výchozí 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 se čtyřmi webovými ovládacími prvky Button. Byl přidán také ovládací prvek Popisek zobrazující číslo aktuální stránky a celkový počet stránek.
V dalším kurzu se dozvíte, jak přidat podporu řazení do datových seznamů a repeaterů. Uvidíme také, jak vytvořit dataList, který se dá stránkovat i řadit (s příklady s použitím výchozího a vlastního stránkování).
Všechno nejlepší na programování!
O autorovi
Scott Mitchell, autor sedmi knih o ASP/ASP.NET a zakladatel 4GuysFromRolla.com, pracuje s webovými technologiemi Microsoftu od roku 1998. Scott pracuje jako nezávislý konzultant, školitel a spisovatel. Jeho nejnovější kniha je Sams Teach Yourself ASP.NET 2.0 in 24 Hours. Můžete ho zastihnout na mitchell@4GuysFromRolla.comadrese . nebo prostřednictvím jeho blogu, který najdete na adrese http://ScottOnWriting.NET.
Zvláštní poděkování
Tato série kurzů byla zkontrolována mnoha užitečnými recenzenty. Hlavními recenzenty pro tento kurz byli Liz Shulok, Ken Pespisa a Bernadette Leigh. Chtěli byste si projít své nadcházející články na webu MSDN? Pokud ano, dejte mi řádek na mitchell@4GuysFromRolla.com.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro