Sdílet prostřednictvím


Stránkování a řazení dat sestavy (C#)

Scott Mitchell

Stáhnout PDF

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.masterpředlohy:

  • Default.aspx
  • SimplePagingSorting.aspx
  • EfficientPaging.aspx
  • SortParameter.aspx
  • CustomSortingUI.aspx

Vytvoření složky PagingAndSorting a přidání ASP.NET stránek kurzu

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.

Přidání uživatelského ovládacího prvku SectionLevelTutorialListing.ascx do Default.aspx

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>

Aktualizovat mapu webu tak, aby zahrnovala nové stránky ASP.NET

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.

Načtení informací o všech produktech pomocí metody GetProducts()

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.

Zvolte možnost (Žádné) v seznamu Drop-Down na kartách AKTUALIZOVAT, VLOŽIT a ODSTRANIT.

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.

Každý z produktů je uvedený

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

Pokud chcete přidat podporu stránkování, zaškrtněte políčko Povolit stránkování.

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í:

  • PagerStyleoznačuje informace o stylu pro stránkovací rozhraní; může zadat nastavení, jako jsou BackColor, ForeColorCssClass, , HorizontalAlignatd.

  • 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 PagerRowStylehodnotu . 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.

Když je stránkování povolené, zobrazí se najednou jenom podmnožina záznamů.

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.

Kliknutí na číslo stránky způsobí postback a zobrazí příslušnou podmnožinu záznamů.

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:

  1. Aktivuje se událost GridView s (nebo DetailsView nebo FormView). PageIndexChanging
  2. ObjectDataSource znovu požaduje všechna data z BLL; Hodnoty vlastností a PageSize GridView PageIndex slouží k určení záznamů vrácených z BLL, které se mají zobrazit v objektu GridView.
  3. 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 truehodnotu . 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 PagingInformationa 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.

Zobrazí se číslo aktuální stránky a celkový počet stránek.

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 .

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.

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.

Snímek obrazovky s oknem Jednoduché stránkování & Řazení zobrazující výsledky seřazené vzestupně podle sloupce Price

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:

  1. GridView s Sorting event fires
  2. Vlastnost GridView s SortExpression je nastavená na SortExpression hodnotu pole, jehož hlavička LinkButton byla klikna.
  3. ObjectDataSource znovu načte všechna data z BLL a pak je seřadí pomocí objektu GridView s. SortExpression
  4. 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í).
  5. 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).

Snímek obrazovky s oknem Pole se zvýrazněnými položkami Price a SortExpression

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.

Odebráním vlastnosti SortExpression už uživatelé nemůžou řadit produkty 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 SortPriceDescendinga 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).

Kliknutí na tlačítko Objednává produkty od nejdražších po nejméně

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:

  1. Dojde k zpětnému odeslání.
  2. Událost předúrovňového ovládacího prvku webového datového webu se aktivuje (PageIndexChanging nebo Sorting)
  3. Všechna data se znovu načtou z objektu ObjectDataSource.
  4. Událost po úrovni webového datového ovládacího prvku se aktivuje (PageIndexChanged nebo Sorted)

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.