Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Sidindelning och sortering är två mycket vanliga funktioner för att visa data i en onlineapplikation. I den här handledningen ska vi ta en första titt på hur du lägger till sortering och paginering i våra rapporter, som vi sedan kommer att bygga vidare på i framtida handledningar.
Inledning
Sidindelning och sortering är två mycket vanliga funktioner för att visa data i en onlineapplikation. När du till exempel söker efter ASP.NET böcker i en onlinebokhandel kan det finnas hundratals sådana böcker, men rapporten som visar sökresultaten visar bara tio matchningar per sida. Dessutom kan resultaten sorteras efter rubrik, pris, antal sidor, författarens namn och så vidare. Medan de senaste 23 handledningarna har undersökt hur du skapar en mängd olika rapporter, inklusive gränssnitt som tillåter tillägg, redigering och borttagning av data, har vi inte tittat på hur du sorterar data och de enda pagineringsexemplen som vi har sett har varit med DetailsView- och FormView-kontrollerna.
I den här självstudien ska vi lära oss hur vi lägger till sortering och paginering i våra rapporter, vilket kan göras genom att bara markera några kryssrutor. Tyvärr har denna förenklade implementering sina nackdelar och sorteringsgränssnittet lämnar en del övrigt att önska, och pagineringen är inte utformad för effektiv navigering genom stora resultatuppsättningar. Framtida tutorials kommer att utforska hur du kan övervinna begränsningarna i de färdiga paginerings- och sorteringslösningarna.
Steg 1: Lägga till handledningens webbsidor för sidnumrering och sortering
Innan vi påbörjar den här självstudien ska vi först ta en stund att lägga till de ASP.NET sidor som vi behöver för den här självstudien och de kommande tre. Börja med att skapa en ny mapp i projektet med namnet PagingAndSorting. Lägg sedan till följande fem ASP.NET sidor i den här mappen, där alla har konfigurerats för att använda huvudsidan Site.master:
Default.aspxSimplePagingSorting.aspxEfficientPaging.aspxSortParameter.aspxCustomSortingUI.aspx
Bild 1: Skapa en PagingAndSorting-mapp och lägg till ASP.NET-sidor för självstudien.
Öppna sedan sidan Default.aspx och dra SectionLevelTutorialListing.ascx användarkontrollen från UserControls mappen till designytan. Den här användarkontrollen, som vi skapade i tutorialen Huvudsidor och Webbplatsnavigering, listar webbplatskartan och visar dessa tutorialer i det aktuella avsnittet som en punktlista.
Bild 2: Lägg till användarkontrollen SectionLevelTutorialListing.ascx i Default.aspx
För att punktlistan ska visa de handledningar för paginering och sortering som vi ska skapa måste vi lägga till dem i sajtöversikten.
Web.sitemap Öppna filen och lägg till följande markering efter nodmarkeringen Redigera, Infoga och Ta bort webbplatskarta:
<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>
Bild 3: Uppdatera webbplatskartan så att den innehåller de nya ASP.NET sidorna
Steg 2: Visa produktinformation i en GridView
Innan vi faktiskt implementerar paginering och sorteringsmöjligheter, ska vi först skapa en standard, icke-paginering, icke-sorteringsbar GridView som listar produktinformationen. Det här är en uppgift som vi har gjort många gånger tidigare i den här självstudieserien, så de här stegen bör vara bekanta.
SimplePagingSorting.aspx Börja med att öppna sidan och dra en GridView-kontroll från verktygslådan till designern och ange dess ID egenskap till Products. Skapa sedan en ny ObjectDataSource som använder metoden ProductsBLL-klass s GetProducts() för att returnera all produktinformation.
Bild 4: Hämta information om alla produkter med metoden GetProducts()
Eftersom den här rapporten är en skrivskyddad rapport behöver du inte mappa ObjectDataSources Insert(), Update()eller Delete() -metoderna till motsvarande ProductsBLL metoder. Välj därför (Ingen) i listrutan för flikarna UPDATE, INSERT och DELETE.
Bild 5: Välj alternativet (Ingen) i listan Drop-Down i flikarna UPDATE, INSERT och DELETE
Nu ska vi anpassa GridView-fälten så att endast produktnamn, leverantörer, kategorier, priser och utgångna statusar visas. Dessutom kan du göra formateringsändringar på fältnivå, till exempel justera HeaderText egenskaperna eller formatera priset som en valuta. Efter dessa ändringar bör rutnätsvyns deklarativa markering se ut ungefär så här:
<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>
Bild 6 visar våra framsteg hittills när den visas i en webbläsare. Observera att sidan visar alla produkter på en skärm som visar varje produkts namn, kategori, leverantör, pris och utgångna status.
Bild 6: Var och en av produkterna visas (Klicka om du vill visa en bild i full storlek)
Steg 3: Lägga till stöd för paginering
En lista över alla produkter på en skärm kan leda till överlagring av information för användaren som läser data. För att göra resultatet mer hanterbart kan vi dela upp data i mindre datasidor och låta användaren gå igenom data en sida i taget. Det gör du genom att markera kryssrutan Aktivera sidindelning från GridViews snabbtagg (detta ställer in GridViews
Bild 7: Markera kryssrutan Aktivera sidindelning för att lägga till stöd för paginering (klicka för att visa bilden i full storlek)
Aktivering av paginering begränsar antalet poster som visas per sida och lägger till ett pagineringgränssnitt i GridView. Sidnumreringsgränssnittet som visas i figur 7 är en serie sidnummer, vilket gör att användaren enkelt och snabbt kan navigera från en sida med data till en annan. Det här personsökningsgränssnittet bör se bekant ut, eftersom vi har sett det när vi tidigare lagt till personsökningsstöd för detaljvyn och formulärvyn i tidigare handledningar.
Kontrollerna DetailsView och FormView visar bara en enda post per sida. GridView läser dock dess PageSize egenskap för att avgöra hur många poster som ska visas per sida (den här egenskapen är som standard värdet 10).
Det här pagineringsgränssnittet för GridView, DetailsView och FormView kan anpassas med hjälp av följande egenskaper:
PagerStyleanger formatinformationen för pagineringsgränssnittet; kan ange inställningar somBackColor,ForeColor,CssClass,HorizontalAlign, och så vidare.PagerSettingsinnehåller en mängd egenskaper som kan anpassa funktionerna i växlingsgränssnittet.PageButtonCountanger det maximala antalet numeriska sidnummer som visas i växlingsgränssnittet (standardvärdet är 10);Modeegenskapen anger hur växlingsgränssnittet fungerar och kan anges till:-
NextPreviousvisar knapparna Nästa och Föregående, så att användaren kan gå framåt eller bakåt en sida i taget -
NextPreviousFirstLastFörutom knapparna Nästa och Föregående ingår även första och sista knapparna, vilket gör att användaren snabbt kan flytta till den första eller sista sidan med data -
Numericvisar en serie sidnummer så att användaren omedelbart kan hoppa till valfri sida -
NumericFirstLastFörutom sidnumren innehåller de första och sista knapparna, vilket gör att användaren snabbt kan flytta till den första eller sista sidan med data. Knapparna första/sista visas bara om alla numeriska sidnummer inte får plats
-
Dessutom erbjuder GridView, DetailsView och FormView alla egenskaperna PageIndex och PageCount, som anger den aktuella sidan som visas och det totala antalet sidor med data, respektive. Egenskapen PageIndex indexeras från och med 0, vilket innebär att när du visar den första sidan med data PageIndex är den lika med 0.
PageCount, å andra sidan, börjar räkna vid 1, vilket innebär att det PageIndex är begränsat till värdena mellan 0 och PageCount - 1.
Låt oss ägna en stund åt att förbättra standardutseendet för vårt GridViews bläddringsgränssnitt. Mer specifikt ska sidlärningsgränssnittet vara högerjusterat med en ljusgrå bakgrund. I stället för att ställa in dessa egenskaper direkt via egenskapen GridView PagerStyle ska vi skapa en CSS-klass i Styles.css med namnet PagerRowStyle och sedan tilldela PagerStyle egenskapen s CssClass via vårt tema. Börja med att öppna Styles.css och lägga till följande CSS-klassdefinition:
.PagerRowStyle
{
background-color: #ddd;
text-align: right;
}
GridView.skin Öppna sedan filen i DataWebControls mappen i App_Themes mappen. Som vi diskuterade i självstudien Huvudsidor och Webbplatsnavigering kan skin-filer användas för att ange standardegenskapsvärdena för en webbkontroll. Utöka därför de befintliga inställningarna att inkludera egenskapen PagerStyle s CssClass till PagerRowStyle. Låt oss också konfigurera växlingsgränssnittet så att det visas högst fem numeriska sidknappar med hjälp av växlingsgränssnittet NumericFirstLast .
<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>
Användarupplevelsen för sidbläddring
Bild 8 visar webbsidan när den besöks via en webbläsare efter att kryssrutan Aktivera paginering i GridView har markerats och konfigurationerna PagerStyle och PagerSettings har gjorts via filen GridView.skin. Observera att endast tio poster visas, och sidindelningen indikerar att vi visar den första sidan med data.
Bild 8: Med sidindelning aktiverad visas endast en del av posterna åt gången (Klicka för att visa fullstor bild)
När användaren klickar på ett av sidnumren i bläddringsgränssnittet, uppstår ett återanrop och sidan läses in igen, som visar den begärda sidans poster. Bild 9 visar resultatet när du har valt att visa den sista sidan med data. Observera att den sista sidan bara har en post; Detta beror på att det finns totalt 81 poster, vilket resulterar i åtta sidor med 10 poster per sida plus en sida med en ensam post.
Bild 9: Genom att klicka på ett sidnummer skapas ett "postback" och visar en lämplig grupp av poster (klicka för att visa bilden i full storlek)
Sammanställning av Server-Side arbetsflöde
När slutanvändaren klickar på en knapp i pagineringens gränssnittet uppstår ett återanrop och följande arbetsflöde på serversidan börjar:
- Händelsen för GridView:s (eller DetailsView eller FormView)
PageIndexChangingutlöses - ObjectDataSource begär om alla data från BLL:n; GridView:s
PageIndexochPageSize-egenskapsvärden används för att avgöra vilka poster som returneras från BLL:n som måste visas i GridView. - GridView-händelsen
PageIndexChangedutlöses
I steg 2 begär ObjectDataSource om alla data från datakällan. Det här sidhanteringsstilen kallas vanligtvis standardpaging eftersom det är sidhanteringsbeteendet som används som standard när AllowPaging-egenskapen ställs in på true. Med standardpaginering hämtar data webbkontroll oinsiktsfullt alla poster för varje sida med data, även om endast en delmängd av poster faktiskt visas i HTML-koden som skickas till webbläsaren. Om inte databasdata cachelagras av BLL eller ObjectDataSource, är standardpaginering inte genomförbar för tillräckligt stora resultatuppsättningar eller för webbapplikationer med många samtidiga användare.
I nästa handledning ska vi undersöka hur du implementerar anpassad pageiniering. Med anpassad sidindelning kan du exakt instruera ObjectDataSource att endast hämta den specifika uppsättning poster som behövs för datasidans innehåll. Som du kan föreställa dig förbättrar anpassad sidindelning avsevärt effektiviteten för sidindelning genom stora resultatuppsättningar.
Anmärkning
Även om standardväxling inte är lämplig vid växling genom tillräckligt stora resultatuppsättningar eller för webbplatser med många samtidiga användare, bör du inse att anpassad växling kräver fler ändringar och arbete för att implementera och inte är lika enkelt som att kontrollera en kryssruta (som standardväxling). Därför kan standardpaginering vara det perfekta valet för små, lågtrafikerade webbplatser eller när man paginerar genom relativt små resultatuppsättningar, eftersom det är mycket enklare och snabbare att implementera.
Om vi till exempel vet att vi aldrig kommer att ha fler än 100 produkter i vår databas, uppvägs den minimala prestandavinsten av anpassad sidindelning sannolikt av arbetet som krävs för att implementera det. Men om vi en dag kan ha tusentals eller tiotusentals produkter skulle bristande implementering av anpassad sidindelning i hög grad hämma skalbarheten för vår applikation.
Steg 4: Anpassa sidbläddringsupplevelsen
Datawebbkontrollerna innehåller ett antal egenskaper som kan användas för att förbättra användarens sidnavigeringsupplevelse. Egenskapen PageCount anger till exempel hur många totalt antal sidor det finns, medan PageIndex egenskapen anger den aktuella sidan som besöks och kan ställas in för att snabbt flytta en användare till en viss sida. För att illustrera hur du kan använda dessa egenskaper för att förbättra användarens bläddringsupplevelse, kan vi lägga till en etikettkontroll på vår sida som informerar användaren om vilken sida de för närvarande besöker. Tillsammans med en listrutekontroll kan användaren snabbt hoppa till en angiven sida.
Lägg först till en etikettwebbkontroll på sidan, ange dess ID egenskap till PagingInformationoch avmarkera dess Text egenskap. Skapa sedan en händelsehanterare för GridView-händelsen DataBound och lägg till följande kod:
protected void Products_DataBound(object sender, EventArgs e)
{
PagingInformation.Text = string.Format("You are viewing page {0} of {1}...",
Products.PageIndex + 1, Products.PageCount);
}
Den här händelsehanteraren tilldelar Etikettens PagingInformation egenskap till ett meddelande som informerar användaren om vilken sida de för närvarande besöker av totalt antal Text sidor (vi lägger till 1 i Products.PageIndex + 1-egenskapen eftersom Products.PageCount indexeras från 0). Jag valde att tilldela egenskapen för Label s Text i händelsehanteraren för DataBound istället för i PageIndexChanged händelsehanteraren eftersom DataBound händelsen utlöses varje gång data är bunden till GridView, medan PageIndexChanged händelsehanteraren enbart utlöses när sidindexet ändras. När GridView ursprungligen databindas när sidan besöks första gången, utlöses inte PageIndexChanging-händelsen (medan DataBound-händelsen däremot gör det).
Med det här tillägget visas nu ett meddelande som anger vilken sida de besöker och hur många totalt antal sidor med data som finns.
Bild 10: Aktuellt sidnummer och totalt antal sidor visas (Klicka om du vill visa en bild i full storlek)
Förutom kontrollen Etikett ska vi även lägga till en rullgardinsmenykontroll som visar sidnumren i GridView med den sida som för närvarande visas markerad. Tanken här är att användaren snabbt kan hoppa från den aktuella sidan till en annan genom att helt enkelt välja det nya sidindexet från listrutan. Börja med att lägga till en listruta i designern, ange dess ID-egenskap till PageList och aktivera alternativet AutoPostBack från dess smarta etikett.
Gå sedan tillbaka till DataBound händelsehanteraren och lägg till följande kod:
// 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;
}
Den här koden börjar med att tömma listrutan PageList på objekt. Detta kan verka överflödigt, eftersom man inte förväntar sig att antalet sidor ska ändras, men andra användare kan använda systemet samtidigt och lägga till eller ta bort poster från Products tabellen. Sådana infogningar eller borttagningar kan ändra antalet sidor med data.
Därefter måste vi skapa sidnumren igen och ha det som mappar till det aktuella GridView PageIndex valt som standard. Vi gör detta med en loop från 0 till PageCount - 1, där vi lägger till en ny ListItem i varje iteration och anger dess Selected-egenskap till true om det aktuella iterationsindexet är lika med GridViews egenskap PageIndex.
Slutligen måste vi skapa en händelsehanterare för dropdownlist-händelsen SelectedIndexChanged , som utlöses varje gång användaren väljer ett annat objekt i listan. Om du vill skapa den här händelsehanteraren dubbelklickar du bara på Listrutan i designern och lägger sedan till följande kod:
protected void PageList_SelectedIndexChanged(object sender, EventArgs e)
{
// Jump to the specified page
Products.PageIndex = Convert.ToInt32(PageList.SelectedValue);
}
Som bild 11 visar gör bara ändringar av GridView-egenskapen att data återgår till GridView.As Figure 11 shows, merely changing the GridView s PageIndex property causes the data to be rebound to the GridView. I GridViews händelsehanterare väljs den lämpliga listrutan DataBound.
Bild 11: Användaren tas automatiskt till den sjätte sidan när du väljer sidan 6 Drop-Down listobjekt (Klicka om du vill visa en bild i full storlek)
Steg 5: Lägga till stöd för Bi-Directional sortering
Det är lika enkelt att lägga till stöd för dubbelriktad sortering som att lägga till stöd för sidindelning genom att enkelt markera alternativet Aktivera sortering i GridViews smarta tagg (som anger egenskapen för GridView AllowSorting till true). Detta renderar varje rubrik i GridView-fälten som länkknappar som, när du klickar på dem, initierar en postback och returnerar data som sorteras efter den klickade kolumnen i stigande ordning. När du klickar på samma rubriklänknapp igen sorteras data i fallande ordning.
Anmärkning
Om du använder ett anpassat dataåtkomstlager i stället för en Typed DataSet kanske du inte har alternativet Aktivera sortering i GridViews smarta tagg. Endast GridViews som är bundna till datakällor som har inbyggt stöd för sortering har den här kryssrutan tillgänglig. Typed DataSet tillhandahåller inbyggt sorteringsstöd eftersom ADO.NET DataTable tillhandahåller en Sort metod som, när den anropas, sorterar DataTable s DataRows med hjälp av de angivna kriterierna.
Om din DAL inte returnerar objekt som har inbyggt stöd för sortering måste du konfigurera ObjectDataSource för att skicka sorteringsinformation till affärslogiklagret, som antingen kan sortera data eller få data sorterade efter DAL. Vi utforskar hur du sorterar data i affärslogik- och dataåtkomstskikten i en framtida självstudie.
De sorterande LinkButtons återges som HTML-hyperlänkar, vars aktuella färger (blå för en obesökt länk och en mörkröd för en besökt länk) kolliderar med bakgrundsfärgen på rubrikraden. I stället ska alla rubrikradslänkar visas i vitt, oavsett om de har besökts eller inte. Detta kan du göra genom att lägga till följande i Styles.css klassen:
.HeaderStyle a, .HeaderStyle a:visited
{
color: White;
}
Den här syntaxen anger att du ska använda vit text när du visar hyperlänkarna i ett element som använder klassen HeaderStyle.
Efter det här CSS-tillägget bör skärmen se ut ungefär som bild 12 när du besöker sidan via en webbläsare. I synnerhet visar bild 12 resultatet efter att länken för prisfältets rubrik har klickats på.
Bild 12: Resultatet har sorterats efter UnitPrice i stigande ordning (klicka om du vill visa en bild i full storlek)
Undersöka sorteringsarbetsflödet
Alla GridView-fälten BoundField, CheckBoxField, TemplateField och så vidare har en SortExpression egenskap som anger det uttryck som ska användas för att sortera data när fältets sorteringsrubriklänk klickas. GridView har också en SortExpression egenskap. När ett sorteringshuvud LinkButton klickas tilldelar GridView fältets SortExpression värde till sin SortExpression egenskap. Därefter hämtas data på nytt från ObjectDataSource och sorteras enligt egenskapen GridView SortExpression . Följande lista beskriver sekvensen med steg som inträffar när en slutanvändare sorterar data i en GridView:
- GridView-sorteringshändelsen utlöses
- GridView:s
SortExpression-egenskap har satts tillSortExpressionför fältet vars sorteringsrubriks LinkButton klickades på - ObjectDataSource hämtar alla data från BLL och sorterar sedan data med hjälp av GridView s
SortExpression - Egenskapen GridViews
PageIndexåterställs till 0, vilket innebär att när användaren sorterar data returneras de till den första sidan med data (förutsatt att sidindelningsstöd har implementerats) - GridView
Sorted-händelsen aktiveras
Precis som med standardpaginering hämtar standardsorteringsalternativet alla poster från BLL:n på nytt. När du använder sortering utan paginering eller när du använder sortering med standardpaginering går det inte att kringgå prestandapåverkan (förutom att cachelagra databasdata). Men som vi kommer att se i en framtida handledning är det möjligt att effektivt sortera data när man använder anpassad paginering.
När du binder en ObjectDataSource till GridView via listrutan i GridViews smarta tagg, tilldelas varje GridView-fält automatiskt sin SortExpression egenskap till namnet på datafältet i ProductsRow klassen. Till exempel ProductName är BoundField s SortExpression inställt på ProductName, som visas i följande deklarativa markering:
<asp:BoundField DataField="ProductName" HeaderText="Product"
SortExpression="ProductName" />
Ett fält kan konfigureras så att det inte kan sorteras genom att rensa dess SortExpression egenskap (tilldela det till en tom sträng). För att illustrera detta kan du tänka dig att vi inte ville låta våra kunder sortera våra produkter efter pris. Egenskapen UnitPrice BoundFields SortExpression kan tas bort från den deklarativa markeringen eller via dialogrutan Fält (som är tillgänglig genom att klicka på länken Redigera kolumner i GridViews smarta tagg).
Bild 13: Resultaten har sorterats efter UnitPrice i stigande ordning
När egenskapen SortExpression har tagits bort för BoundField återges rubriken som text i stället för UnitPrice som en länk, vilket hindrar användare från att sortera data efter pris.
Bild 14: Genom att ta bort egenskapen SortExpression kan användarna inte längre sortera produkterna efter pris (klicka om du vill visa en bild i full storlek)
Sortera GridView programmatiskt
Du kan också sortera innehållet i GridView programmatiskt med hjälp av Metoden GridViewSort. Skicka bara in värdet SortExpression för att sortera efter tillsammans med SortDirection (Ascending eller Descending), så sorteras GridView-data på nytt.
Tänk dig att anledningen till att vi stängde av sortering efter UnitPrice var att vi var oroliga för att våra kunder bara skulle köpa de billigaste produkterna. Vi vill dock uppmuntra dem att köpa de dyraste produkterna, så vi vill att de ska kunna sortera produkterna efter pris, men bara från det dyraste priset till minst.
Om du vill göra detta lägger du till en knappwebbkontroll på sidan genom att ange dess ID egenskap till SortPriceDescending, och dess Text egenskap till Sortera efter pris. Skapa sedan en händelsehanterare för button-händelsen Click genom att dubbelklicka på knappkontrollen i designern. Lägg till följande kod i den här händelsehanteraren:
protected void SortPriceDescending_Click(object sender, EventArgs e)
{
// Sort by UnitPrice in descending order
Products.Sort("UnitPrice", SortDirection.Descending);
}
Om du klickar på den här knappen returneras användaren till den första sidan med produkterna sorterade efter pris, från dyraste till billigaste (se bild 15).
Bild 15: Genom att klicka på knappen Order the Products From the Most Expensive to the Least (Klicka för att visa en bild i full storlek)
Sammanfattning
I den här handledningen såg vi hur du implementerar standardfunktioner för paginering och sortering, vilka båda var lika enkla som att markera en kryssruta! När en användare sorterar eller sidor genom data utvecklas ett liknande arbetsflöde:
- En postback följer
- Datawebbkontrollens händelse på förnivå utlöses (
PageIndexChangingellerSorting) - Alla data hämtas på nytt av ObjectDataSource
- Datawebbkontrollens efternivåhändelse utlöses (
PageIndexChangedellerSorted)
Även om det är enkelt att implementera grundläggande paginering och sortering, krävs ytterligare insatser för att utnyttja den mer effektiva anpassade pagineringen eller för att ytterligare förbättra gränssnittet för paginering eller sortering. Framtida handledningar kommer att utforska dessa ämnen.
Lycka till med programmerandet!
Om författaren
Scott Mitchell, författare till sju ASP/ASP.NET-böcker och grundare av 4GuysFromRolla.com, har arbetat med Microsofts webbtekniker sedan 1998. Scott arbetar som oberoende konsult, tränare och författare. Hans senaste bok är Sams Teach Yourself ASP.NET 2.0 på 24 timmar. Han kan nås på mitchell@4GuysFromRolla.com.