Language:

Paging durch das GridView-Control via GET

Language: Deutsch
Programming Language: C#
Published by: Thomas
Last Update: 5/5/2006
Views: 1581

Description

Das GridView-Control von ASP.NET 2.0 bringt eigentlich fast alles mit, was man benötigt, um Datenlisten darzustellen, auch Paging. Mit dem eingebauten Pager-Modul lässt es sich prima auf verschiedene Arten durch die Listen blättern.

Leider hat das Build-In-Feature einen großen Haken: es nutzt Postbacks, und die werden auch noch mit JavaScript ausgeführt. Gleich zwei Probleme auf einmal.

1. Nicht jeder User hat JavaScript aktiviert, und nicht auf jeder Seite ist es wirklich notwendig das zu haben.
2. Suchmaschinen-Roboter scheren sich nicht um JavaScript, und erst recht nicht um Formulare.

Die Lösung ist ein Pager, der mit ganz normalen Links arbeitet ...

Code

1 CS: 2 3 protected void SetGridViewPager(object sender, EventArgs e) 4 { 5 6 /* Step 1: Get the current displayed page number and decrement it by 1 to 7 * get the current pageIndex for the Grid. 8 * 9 * If an error occurs set the pageIndex to 0 */ 10 int page; 11 12 if (!int.TryParse(Request.QueryString["Page"], out page)) 13 page = 0; 14 else 15 if (page < 0) 16 page = 0; 17 else 18 page--; 19 20 GridView1.PageIndex = page; 21 22 /* Step 2: Get the "PageCount" - this means the count of pages which are 23 * avaiable. Then increment page by one to get the really current page */ 24 int total = GridView1.PageCount; 25 int current = page + 1; 26 27 // Step 3: Display the Pager-Buttons an d the seperator 28 29 // Show next button 30 if (current + 1 <= total) 31 { 32 HyperLink PagerNext = (HyperLink)GridView1.BottomPagerRow.FindControl("PagerNext"); 33 PagerNext.Visible = true; 34 PagerNext.NavigateUrl = string.Format("{0}?Page={1}", Request.Path, current+1); 35 } 36 37 // Show previous button 38 if (current - 1 > 0) 39 { 40 HyperLink PagerPrev = (HyperLink)GridView1.BottomPagerRow.FindControl("PagerPrev"); 41 PagerPrev.Visible = true; 42 PagerPrev.NavigateUrl = string.Format("{0}?Page={1}", Request.Path, current - 1); 43 } 44 45 // Show seperator 46 if (current - 1 > 0 && current + 1 <= total) 47 { 48 Label PagerSeperator = (Label)GridView1.BottomPagerRow.FindControl("PagerSeperator"); 49 PagerSeperator.Visible = true; 50 } 51 52 53 } 54 55 ASPX: 56 57 <form id="form1" runat="server"> 58 <div> 59 <asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="~/App_Data/contacts.mdb" 60 SelectCommand="SELECT [ContactId], [ContactName] FROM [Contacts] ORDER BY [ContactName]"> 61 </asp:AccessDataSource> 62 &nbsp;</div> 63 <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" 64 DataKeyNames="ContactId" PageSize="3" OnDataBound="SetGridViewPager" DataSourceID="AccessDataSource1"> 65 <Columns> 66 <asp:BoundField DataField="ContactId" HeaderText="ContactId" ReadOnly="True" SortExpression="ContactId" /> 67 <asp:BoundField DataField="ContactName" HeaderText="ContactName" SortExpression="ContactName" /> 68 </Columns> 69 <PagerSettings Position="Bottom" /> 70 <PagerTemplate> 71 <asp:HyperLink ID="PagerPrev" runat="server" Visible="false">Zurück</asp:HyperLink> 72 <asp:Label ID="PagerSeperator" runat="server" Visible="false"> | </asp:Label> 73 <asp:HyperLink ID="PagerNext" runat="server" Visible="false">Weiter</asp:HyperLink> 74 </PagerTemplate> 75 </asp:GridView> 76 </form>

No comments avaiable

Add a comment

Name *  

Email (won't be displayed) *    

Website  

Comment *  

Sicherheitscode Security Code *    

RSS