Stránkování a řazení dat sestavy (C#)
Stránkování a řazení jsou dvě velmi běžné funkce při zobrazení dat v online aplikaci. V tomto kurzu se nejprve podíváme na přidání řazení a stránkování do sestav, na kterých pak budeme stavět v budoucích kurzech.
Ú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. Výsledky se navíc dají seřadit podle názvu, ceny, počtu stránek, jména autora atd. Zatímco posledních 23 kurzů zkoumalo, jak vytvářet různé sestavy, včetně rozhraní, která umožňují přidávání, úpravy a odstraňování dat, jsme se nezabídli na to, jak řadit data a jediné příklady stránkování, které jsme viděli, byly s ovládacími prvky DetailsView a FormView.
V tomto kurzu se dozvíte, jak do sestav přidat řazení a stránkování, což se dá udělat jednoduchým zaškrtnutím několika políček. Tato zjednodušená implementace má bohužel své nevýhody, protože rozhraní pro řazení nechává trochu požadované a rutiny stránkování nejsou navrženy pro efektivní stránkování velkými sadami výsledků. V budoucích kurzech se dozvíte, jak překonat omezení předdefinovaných řešení stránkování a řazení.
Krok 1: Přidání webových stránek kurzu stránkování a řazení
Než začneme s tímto kurzem, udělejme si nejdřív chvilku a přidejte ASP.NET stránky, které budeme potřebovat pro tento kurz, a další tři. Začněte vytvořením nové složky v projektu s názvem PagingAndSorting
. Dále do této složky přidejte následujících pět ASP.NET stránek, přičemž všechny z nich budou nakonfigurovány tak, aby používaly stránku Site.master
předlohy:
Default.aspx
SimplePagingSorting.aspx
EfficientPaging.aspx
SortParameter.aspx
CustomSortingUI.aspx
Obrázek 1: Vytvoření složky PagingAndSorting a přidání kurzu ASP.NET stránek
Pak otevřete Default.aspx
stránku a přetáhněte SectionLevelTutorialListing.ascx
uživatelský ovládací prvek ze UserControls
složky na plochu Návrh. 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í uživatelského ovládacího prvku SectionLevelTutorialListing.ascx do Default.aspx
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čky uzlu Upravit, Vložit a odstranit mapu webu přidejte následující kód:
<siteMapNode title="Paging and Sorting" url="~/PagingAndSorting/Default.aspx"
description="Samples of Reports that Provide Paging and Sorting Capabilities">
<siteMapNode url="~/PagingAndSorting/SimplePagingSorting.aspx"
title="Simple Paging & Sorting Examples"
description="Examines how to add simple paging and sorting support." />
<siteMapNode url="~/PagingAndSorting/EfficientPaging.aspx"
title="Efficiently Paging Through Large Result Sets"
description="Learn how to efficiently page through large result sets." />
<siteMapNode url="~/PagingAndSorting/SortParameter.aspx"
title="Sorting Data at the BLL or DAL"
description="Illustrates how to perform sorting logic in the Business Logic
Layer or Data Access Layer." />
<siteMapNode url="~/PagingAndSorting/CustomSortingUI.aspx"
title="Customizing the Sorting User Interface"
description="Learn how to customize and improve the sorting user interface." />
</siteMapNode>
Obrázek 3: Aktualizace mapy webu tak, aby zahrnovala nové stránky ASP.NET
Krok 2: Zobrazení informací o produktu v GridView
Než skutečně implementujeme možnosti stránkování a řazení, pojďme nejprve vytvořit standardní neřaditelný a nestránkovatelný objekt GridView, který obsahuje informace o produktu. Toto je úkol, který jsme už mnohokrát dělali v rámci této série kurzů, takže tyto kroky by měly být známé. Začněte otevřením SimplePagingSorting.aspx
stránky a přetažením ovládacího prvku GridView z panelu nástrojů na Designer, nastavením jeho ID
vlastnosti na Products
. Dále vytvořte nový ObjectDataSource, který používá metodu ProductsBLL třídy s GetProducts()
k vrácení všech informací o produktu.
Obrázek 4: Načtení informací o všech produktech pomocí metody GetProducts()
Vzhledem k tomu, že tato sestava je sestava jen pro čtení, není nutné mapovat metody ObjectDataSource s Insert()
, Update()
nebo Delete()
na odpovídající ProductsBLL
metody. Proto zvolte (None) z rozevíracího seznamu pro karty UPDATE, INSERT a DELETE.
Obrázek 5: Výběr možnosti (Žádné) v seznamu Drop-Down na kartách AKTUALIZOVAT, VLOŽIT a ODSTRANIT
Dále pojďme přizpůsobit pole GridView tak, aby se zobrazovaly pouze názvy produktů, dodavatelé, kategorie, ceny a stavy ukončení. Kromě toho můžete provádět jakékoli změny formátování na úrovni polí, například úpravu HeaderText
vlastností nebo formátování ceny jako měny. Po těchto změnách by deklarativní značky GridView měly vypadat nějak takto:
<asp:GridView ID="Products" runat="server" AutoGenerateColumns="False"
DataKeyNames="ProductID" DataSourceID="ObjectDataSource1"
EnableViewState="False">
<Columns>
<asp:BoundField DataField="ProductName" HeaderText="Product"
SortExpression="ProductName" />
<asp:BoundField DataField="CategoryName" HeaderText="Category"
ReadOnly="True" SortExpression="CategoryName" />
<asp:BoundField DataField="SupplierName" HeaderText="Supplier"
ReadOnly="True" SortExpression="SupplierName" />
<asp:BoundField DataField="UnitPrice" HeaderText="Price"
SortExpression="UnitPrice" DataFormatString="{0:C}"
HtmlEncode="False" />
<asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued"
SortExpression="Discontinued" />
</Columns>
</asp:GridView>
Obrázek 6 ukazuje náš dosavadní pokrok při prohlížení prostřednictvím prohlížeče. Všimněte si, že stránka obsahuje seznam všech produktů na jedné obrazovce a zobrazuje název, kategorii, dodavatele, cenu a stav ukončeného produktu.
Obrázek 6: Každý z produktů je uvedený (kliknutím zobrazíte obrázek v plné velikosti)
Krok 3: Přidání podpory stránkování
Zobrazení seznamu všech produktů na jedné obrazovce může vést k přetížení informací pro uživatele, který si data prohlížuje. Abychom lépe zvládli výsledky, můžeme data rozdělit na menší stránky dat a umožnit uživateli procházet data po jednotlivých stránkách. Chcete-li to provést, jednoduše zaškrtněte políčko Povolit stránkování z inteligentní značky GridView (tím nastavíte vlastnost GridView naAllowPaging
).true
Obrázek 7: Zaškrtnutím políčka Povolit stránkování přidejte podporu stránkování (kliknutím zobrazíte obrázek v plné velikosti).
Povolení stránkování omezí počet záznamů zobrazených na stránce a přidá stránkovací rozhraní do objektu GridView. Výchozí stránkovací rozhraní, znázorněné na obrázku 7, je řada čísel stránek, které uživateli umožňují rychle přecházet z jedné stránky dat na jinou. Toto stránkovací rozhraní by mělo vypadat povědomě, jak jsme to viděli při přidávání podpory stránkování do ovládacích prvků DetailsView a FormView v předchozích kurzech.
Ovládací prvky DetailsView i FormView zobrazují pouze jeden záznam na stránku. Objekt GridView ale na základě své PageSize
vlastnosti určí, kolik záznamů se má zobrazit na stránce (výchozí hodnota této vlastnosti je 10).
Toto stránkovací rozhraní GridView, DetailsView a FormView lze přizpůsobit pomocí následujících vlastností:
PagerStyle
označuje informace o stylu pro stránkovací rozhraní; může zadat nastavení, jako jsouBackColor
,ForeColor
CssClass
, ,HorizontalAlign
atd.PagerSettings
obsahuje řadu vlastností, které mohou přizpůsobit funkčnost stránkovacího rozhraní;PageButtonCount
určuje maximální počet čísel stránek zobrazených ve stránkovacím rozhraní (výchozí hodnota je 10);Mode
vlastnost určuje, jak stránkovací rozhraní funguje, a lze ji nastavit na:NextPrevious
zobrazuje tlačítka Další a Předchozí, která uživateli umožňují krokovat o jednu stránku dopředu nebo dozadu.NextPreviousFirstLast
Kromě tlačítek Další a Předchozí jsou k dispozici také tlačítka První a Poslední, která uživateli umožňují rychlý přechod na první nebo poslední stránku dat.Numeric
zobrazuje řadu čísel stránek, což uživateli umožňuje okamžitě přejít na libovolnou stránku.NumericFirstLast
kromě čísel stránek, zahrnuje First a Last tlačítka, což umožňuje uživateli rychle přejít na první nebo poslední stránku dat; Tlačítka První/Poslední se zobrazí jenom v případě, že se všechna číselná čísla stránek nevejdou.
Kromě toho GridView, DetailsView a FormView nabízejí PageIndex
vlastnosti a PageCount
, které označují aktuální stránku, která se zobrazuje, a celkový počet stránek dat, v uvedeném pořadí. Vlastnost PageIndex
se indexuje od hodnoty 0, což znamená, že při zobrazení první stránky dat PageIndex
se bude rovnat hodnotě 0. PageCount
, na druhé straně začne počítat od 1, což znamená, že PageIndex
je omezený na hodnoty mezi 0 a PageCount - 1
.
Pojďme chvíli vylepšit výchozí vzhled stránkovacího rozhraní GridView. Konkrétně nechte stránkovací rozhraní zarovnat doprava se světle šedým pozadím. Místo nastavení těchto vlastností přímo prostřednictvím vlastnosti GridView s PagerStyle
, pojďme vytvořit třídu CSS v Styles.css
s názvem PagerRowStyle
a pak přiřadit PagerStyle
vlastnost s CssClass
prostřednictvím našeho motivu. Začněte otevřením Styles.css
a přidáním následující definice třídy CSS:
.PagerRowStyle
{
background-color: #ddd;
text-align: right;
}
Potom otevřete GridView.skin
soubor ve DataWebControls
složce ve App_Themes
složce . Jak jsme probrali v kurzu Stránky předlohy a Navigace na webu , soubory Skin lze použít k určení výchozích hodnot vlastností webového ovládacího prvku. Proto rozšiřte stávající nastavení tak, aby zahrnovalo PagerStyle
nastavení vlastnosti s CssClass
na PagerRowStyle
hodnotu . Pojďme také nakonfigurovat stránkovací rozhraní tak, aby pomocí NumericFirstLast
stránkovacího rozhraní zobrazovala maximálně pět číselných tlačítek stránek.
<asp:GridView runat="server" CssClass="DataWebControlStyle">
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
<RowStyle CssClass="RowStyle" />
<HeaderStyle CssClass="HeaderStyle" />
<FooterStyle CssClass="FooterStyle" />
<SelectedRowStyle CssClass="SelectedRowStyle" />
<PagerStyle CssClass="PagerRowStyle" />
<PagerSettings Mode="NumericFirstLast" PageButtonCount="5" />
</asp:GridView>
Uživatelské prostředí stránkování
Obrázek 8 ukazuje webovou stránku při návštěvě prostřednictvím prohlížeče po zaškrtnutí políčka Povolit stránkování GridView a PagerStyle
konfigurace a PagerSettings
byly provedeny prostřednictvím GridView.skin
souboru. Všimněte si, že se zobrazuje jenom deset záznamů a stránkovací rozhraní indikuje, že si prohlížíme první stránku dat.
Obrázek 8: Když je stránkování povolené, zobrazí se najednou jenom podmnožina záznamů (kliknutím zobrazíte obrázek v plné velikosti).
Když uživatel klikne na jedno z čísel stránek ve stránkovacím rozhraní, dojde k zpětnému odeslání a stránka se znovu načte a zobrazí požadované záznamy stránky. Obrázek 9 znázorňuje výsledky po tom, co se rozhodnete zobrazit poslední stránku dat. Všimněte si, že poslední stránka má pouze jeden záznam; Je to proto, že existuje celkem 81 záznamů, výsledkem je osm stránek po 10 záznamech na stránku plus jedna stránka s jedním záznamem.
Obrázek 9: Kliknutí na číslo stránky způsobí zpětné odeslání a zobrazí příslušnou podmnožinu záznamů (kliknutím zobrazíte obrázek v plné velikosti)
Pracovní postup stránkování s Server-Side
Když koncový uživatel klikne na tlačítko ve stránkovacím rozhraní, dojde k zpětnému odeslání a spustí se následující pracovní postup na straně serveru:
- Aktivuje se událost GridView s (nebo DetailsView nebo FormView).
PageIndexChanging
- ObjectDataSource znovu požaduje všechna data z BLL; Hodnoty vlastností a
PageSize
GridViewPageIndex
slouží k určení záznamů vrácených z BLL, které se mají zobrazit v objektu GridView. - Aktivuje se
PageIndexChanged
událost GridView
V kroku 2 objekt ObjectDataSource znovu požádá o všechna data ze svého zdroje dat. Tento styl stránkování se běžně označuje jako výchozí stránkování, protože se jedná o chování stránkování používané ve výchozím nastavení při nastavení AllowPaging
vlastnosti na true
hodnotu . Při výchozím stránkování webový ovládací prvek dat naivně načítá všechny záznamy pro každou stránku dat, i když se ve skutečnosti do kódu HTML odesílaného do prohlížeče vykreslí pouze podmnožina záznamů. Pokud data databáze nejsou uložena v mezipaměti BLL nebo ObjectDataSource, výchozí stránkování není možné pro dostatečně velké sady výsledků výsledků nebo pro webové aplikace s mnoha souběžnými uživateli.
V dalším kurzu prozkoumáme, jak implementovat vlastní stránkování. Pomocí vlastního stránkování můžete objektu ObjectDataSource výslovně dát pokyn, aby načetl pouze přesnou sadu záznamů potřebnou pro požadovanou stránku dat. Jak si umíte představit, vlastní stránkování výrazně vylepšuje efektivitu stránkování velkých sad výsledků.
Poznámka
I když výchozí stránkování není vhodné při stránkování dostatečně velkými sadami výsledků dotazu nebo pro weby s mnoha souběžnými uživateli, uvědomte si, že vlastní stránkování vyžaduje k implementaci více změn a úsilí a není tak jednoduché jako zaškrtnutí políčka (jako výchozí stránkování). Výchozí stránkování proto může být ideální volbou pro malé weby s nízkým provozem nebo při stránkování přes relativně malé sady výsledků, protože je mnohem jednodušší a rychlejší implementovat.
Pokud například víme, že v databázi nikdy nebudeme mít více než 100 produktů, bude minimální zisk z vlastního stránkování pravděpodobně kompenzován úsilím potřebným k jeho implementaci. Pokud ale jednou budeme mít tisíce nebo desetitisíce produktů, neimimpinace vlastního stránkování by výrazně zkomplikovala škálovatelnost naší aplikace.
Krok 4: Přizpůsobení prostředí stránkování
Webové ovládací prvky dat poskytují řadu vlastností, které lze použít k vylepšení uživatelského stránkování. Vlastnost PageCount
například určuje celkový počet stránek, zatímco PageIndex
vlastnost označuje aktuální navštívenou stránku a dá se nastavit tak, aby se uživatel rychle přesunul na určitou stránku. Abychom ilustrovali, jak tyto vlastnosti použít ke zlepšení uživatelského stránkování, přidejte na naši stránku ovládací prvek Label Web, který uživatele informuje o tom, kterou stránku právě navštěvuje, spolu s ovládacím prvku DropDownList, který mu umožní rychle přejít na libovolnou danou stránku.
Nejprve na stránku přidejte ovládací prvek Label Web, nastavte jeho ID
vlastnost na PagingInformation
a vymažte jeho Text
vlastnost. Dále vytvořte obslužnou rutinu události pro událost GridView a DataBound
přidejte následující kód:
protected void Products_DataBound(object sender, EventArgs e)
{
PagingInformation.Text = string.Format("You are viewing page {0} of {1}...",
Products.PageIndex + 1, Products.PageCount);
}
Tato obslužná rutina události přiřadí PagingInformation
vlastnost Label s Text
zprávě informující uživatele o tom, že stránka, kterou právě navštěvuje Products.PageIndex + 1
, z celkového počtu stránek Products.PageCount
(k vlastnosti přidáme 1 Products.PageIndex
, protože PageIndex
se indexuje od 0). Přiřazování této vlastnosti Label s Text
v DataBound
obslužné rutině události jsem zvolil(a) na rozdíl od PageIndexChanged
obslužné rutiny události, protože DataBound
událost se aktivuje pokaždé, když jsou data svázaná s objektem GridView, zatímco PageIndexChanged
obslužná rutina události se aktivuje pouze při změně indexu stránky. Pokud je objekt GridView zpočátku svázán s daty při první návštěvě stránky, PageIndexChanging
událost se neaktivuje (zatímco DataBound
událost ano).
Po tomto přidání se uživateli zobrazí zpráva s informací o tom, jakou stránku navštěvuje a kolik stránek dat celkem existuje.
Obrázek 10: Zobrazuje se číslo aktuální stránky a celkový počet stránek (kliknutím zobrazíte obrázek v plné velikosti)
Kromě ovládacího prvku Popisek přidáme také ovládací prvek DropDownList, který vypíše čísla stránek v GridView s vybranou aktuálně zobrazenou stránkou. Myšlenka je taková, že uživatel může rychle přejít z aktuální stránky na jinou jednoduchým výběrem indexu nové stránky z rozevíracího seznamu. Začněte tím, že do Designer přidáte rozevírací seznam, nastavíte jeho ID
vlastnost na PageList
hodnotu a zkontrolujete možnost Enable AutoPostBack (Povolit autoPostBack) u příslušné inteligentní značky.
Dále se vraťte k obslužné rutině DataBound
události a přidejte následující kód:
// Clear out all of the items in the DropDownList
PageList.Items.Clear();
// Add a ListItem for each page
for (int i = 0; i < Products.PageCount; i++)
{
// Add the new ListItem
ListItem pageListItem = new ListItem(string.Concat("Page ", i + 1), i.ToString());
PageList.Items.Add(pageListItem);
// select the current item, if needed
if (i == Products.PageIndex)
pageListItem.Selected = true;
}
Tento kód začíná vymazáním položek v rozevíracím PageList
seznamu. To se může zdát nadbytečné, protože člověk by nečekal, že se změní počet stránek, ale ostatní uživatelé můžou systém používat současně a přidávat záznamy z tabulky nebo je z Products
tabulky odebírat. Takové vložení nebo odstranění může změnit počet stránek dat.
Dále musíme znovu vytvořit čísla stránek a ve výchozím nastavení vybrat tu, která se mapuje na aktuální Objekt GridView PageIndex
. Dosáhneme toho pomocí smyčky od 0 do PageCount - 1
, přidáme novou ListItem
v každé iteraci a nastavíme jeho Selected
vlastnost na true, pokud se aktuální index iterace rovná vlastnosti GridView s PageIndex
.
Nakonec musíme vytvořit obslužnou rutinu události pro událost DropDownList, SelectedIndexChanged
která se aktivuje pokaždé, když uživatel vybere ze seznamu jinou položku. Pokud chcete vytvořit tuto obslužnou rutinu události, jednoduše poklikejte na DropDownList v Designer a pak přidejte následující kód:
protected void PageList_SelectedIndexChanged(object sender, EventArgs e)
{
// Jump to the specified page
Products.PageIndex = Convert.ToInt32(PageList.SelectedValue);
}
Jak je znázorněno na obrázku 11, pouze změna vlastnosti GridView PageIndex
způsobí, že data budou zpět do GridView. V obslužné rutině události GridView DataBound
je vybrána příslušná položka DropDownList ListItem
.
Obrázek 11: Uživatel je automaticky přesměrován na šestou stránku při výběru stránky 6 Drop-Down položku seznamu (kliknutím zobrazíte obrázek v plné velikosti)
Krok 5: Přidání podpory řazení Bi-Directional
Přidání podpory obousměrného řazení je stejně jednoduché jako přidání podpory stránkování, jednoduše zaškrtněte možnost Povolit řazení z inteligentní značky GridView s (která nastaví vlastnost GridView s AllowSorting
na true
). Tím se vykreslí všechna záhlaví polí GridView jako LinkButtons, které při kliknutí způsobí zpětné odeslání a vrátí data seřazená podle sloupce, na který uživatel kliknul, ve vzestupném pořadí. Opětovným kliknutím na stejné záhlaví LinkButton znovu seřadíte data v sestupném pořadí.
Poznámka
Pokud místo typové datové sady používáte vlastní vrstvu přístupu k datům, možná nebudete mít možnost Povolit řazení v inteligentní značce GridView. Toto políčko mají k dispozici pouze objekty GridView vázané na zdroje dat, které nativně podporují řazení. Typed DataSet poskytuje před-of-box řazení podporu, protože ADO.NET DataTable poskytuje metoduSort
, která při vyvolání seřadí DataTable DataRows pomocí zadaných kritérií.
Pokud dal nevrací objekty, které nativně podporují řazení, budete muset nakonfigurovat ObjectDataSource tak, aby předával informace o řazení do vrstvy obchodní logiky, která může buď řadit data, nebo mít data seřazená podle DAL. Způsob řazení dat ve vrstvách obchodní logiky a přístupu k datům prozkoumáme v dalším kurzu.
Tlačítka pro řazení linkbutton se vykreslují jako hypertextové odkazy HTML, jejichž aktuální barvy (modrá pro neviditelný odkaz a tmavě červená pro navštívený odkaz) kolidují s barvou pozadí řádku záhlaví. Místo toho nechte všechny odkazy řádků záhlaví zobrazovat bíle, bez ohledu na to, zda byly navštíveny nebo ne. Toho lze dosáhnout přidáním následujícího do Styles.css
třídy:
.HeaderStyle a, .HeaderStyle a:visited
{
color: White;
}
Tato syntaxe označuje použít bílý text při zobrazení těchto hypertextových odkazů v elementu, který používá HeaderStyle třídy.
Po tomto přidání šablon stylů CSS by při návštěvě stránky v prohlížeči měla obrazovka vypadat podobně jako na obrázku 12. Konkrétně obrázek 12 ukazuje výsledky po kliknutí na odkaz záhlaví pole Cena.
Obrázek 12: Výsledky byly seřazeny podle UnitPrice ve vzestupném pořadí (kliknutím zobrazíte obrázek v plné velikosti)
Zkoumání pracovního postupu řazení
Všechna pole GridView BoundField, CheckBoxField, TemplateField a tak dále mají SortExpression
vlastnost označující výraz, který se má použít k řazení dat při kliknutí na odkaz záhlaví řazení tohoto pole. Objekt GridView má SortExpression
také vlastnost . Při kliknutí na tlačítko LinkButton záhlaví, Objekt GridView přiřadí hodnotu tohoto pole SortExpression
k jeho SortExpression
vlastnosti. Dále se data znovu načtou z ObjectDataSource a seřadí podle vlastnosti GridView s SortExpression
. Následující seznam podrobně popisuje posloupnost kroků, které se objeví, když koncový uživatel seřadí data v objektu GridView:
- GridView s Sorting event fires
- Vlastnost GridView s
SortExpression
je nastavená naSortExpression
hodnotu pole, jehož hlavička LinkButton byla klikna. - ObjectDataSource znovu načte všechna data z BLL a pak je seřadí pomocí objektu GridView s.
SortExpression
- Vlastnost GridView s
PageIndex
je resetována na hodnotu 0, což znamená, že při řazení se uživatel vrátí na první stránku dat (za předpokladu, že byla implementována podpora stránkování). - Aktivuje se
Sorted
událost GridView
Stejně jako u výchozího stránkování výchozí možnost řazení znovu načte všechny záznamy z BLL. Při použití řazení bez stránkování nebo při použití řazení s výchozím stránkováním neexistuje žádný způsob, jak tento výkon obejít (nedostatek ukládání dat databáze do mezipaměti). Jak ale uvidíme v dalším kurzu, při použití vlastního stránkování je možné data efektivně řadit.
Při vazbě ObjectDataSource na GridView prostřednictvím rozevíracího seznamu v GridView inteligentní značky, každé GridView pole má automaticky přiřazena jeho SortExpression
vlastnost k názvu datového pole ve ProductsRow
třídě. Například ProductName
BoundField s SortExpression
je nastavena na ProductName
, jak je znázorněno v následujícím deklarativním kódu:
<asp:BoundField DataField="ProductName" HeaderText="Product"
SortExpression="ProductName" />
Pole lze nakonfigurovat tak, aby ho nebylo možné seřadit vymazáním jeho SortExpression
vlastnosti (přiřazením k prázdnému řetězci). Abychom to ilustrovali, představte si, že nechceme, aby naši zákazníci mohli řadit naše produkty podle ceny. Vlastnost UnitPrice
BoundField SortExpression
je možné odebrat buď z deklarativního kódu, nebo prostřednictvím dialogového okna Pole (které je přístupné kliknutím na odkaz Upravit sloupce v inteligentní značce GridView).
Obrázek 13: Výsledky byly seřazeny podle JednotkováCena ve vzestupném pořadí
SortExpression
Jakmile je vlastnost boundField UnitPrice
odebrána, záhlaví se vykreslí jako text, nikoli jako odkaz, což uživatelům zabrání v řazení dat podle ceny.
Obrázek 14: Odebráním vlastnosti SortExpression už uživatelé nemůžou řadit produkty podle ceny (kliknutím zobrazíte obrázek v plné velikosti).
Řazení objektu GridView prostřednictvím kódu programu
Obsah objektu GridView můžete také programově seřadit pomocí metody GridView sSort
. Jednoduše předejte SortExpression
hodnotu, podle které chcete řadit, spolu s SortDirection
(Ascending
nebo Descending
) a data GridView se seřadí znovu.
Představte si, že důvodem, proč jsme vypnuli řazení podle UnitPrice
, bylo to, že jsme se báli, že naši zákazníci jednoduše koupí jenom produkty s nejnižší cenou. Chceme je však vyzvat k nákupu nejdražších produktů, takže bychom chtěli, aby mohli řadit produkty podle ceny, ale pouze od nejdražší ceny po nejnižší.
Chcete-li toho dosáhnout, přidejte na stránku webový ovládací prvek Tlačítko, nastavte jeho ID
vlastnost na SortPriceDescending
a jeho Text
vlastnost na Seřadit podle ceny. Dále vytvořte obslužnou rutinu události pro událost Button s Click
poklikáním na ovládací prvek Tlačítko v Designer. Do této obslužné rutiny události přidejte následující kód:
protected void SortPriceDescending_Click(object sender, EventArgs e)
{
// Sort by UnitPrice in descending order
Products.Sort("UnitPrice", SortDirection.Descending);
}
Kliknutím na toto tlačítko se uživatel vrátí na první stránku s produkty seřazenými podle ceny od nejdražších po nejlevnější (viz Obrázek 15).
Obrázek 15: Kliknutím na tlačítko objednáte produkty od nejdražších po nejnižší (kliknutím zobrazíte obrázek v plné velikosti)
Souhrn
V tomto kurzu jsme viděli, jak implementovat výchozí možnosti stránkování a řazení, které byly stejně snadné jako zaškrtnutí políčka. Když uživatel seřadí nebo stránkuje data, spustí se podobný pracovní postup:
- Dojde k zpětnému odeslání.
- Událost předúrovňového ovládacího prvku webového datového webu se aktivuje (
PageIndexChanging
neboSorting
) - Všechna data se znovu načtou z objektu ObjectDataSource.
- Událost po úrovni webového datového ovládacího prvku se aktivuje (
PageIndexChanged
neboSorted
)
Přestože implementace základního stránkování a řazení je hračka, je třeba vyvinout více úsilí, aby bylo možné využít efektivnější vlastní stránkování nebo dále vylepšit rozhraní pro stránkování nebo řazení. Tato témata prozkoumáme v dalších kurzech.
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.