เมื่อไม่กี่วันก่อน ฉันเขียนเกี่ยวกับ <<การนำเพจไปใช้ใน Stored Procedure>> และ <<คำอธิบายโดยละเอียดเกี่ยวกับเหตุการณ์การควบคุม GridView>> ต่อมามีคนถามฉันว่าจะนำสิ่งนี้ไปใช้งานใน GridView ได้อย่างไร อันที่จริงมันง่ายมาก ส่วนใหญ่จะมีปัญหาในการบันทึกหมายเลขหน้า PageIndex ของหน้าปัจจุบัน แต่ทุกอย่างจะแก้ไขได้ง่ายกว่า เพราะในกระบวนการแบ่งหน้า แน่นอนว่า PageSize เราสามารถใช้แอตทริบิวต์เพื่อแสดงมันได้หลายวิธี บันทึก PageIndex และข้อมูลจะมีขนาดไม่ใหญ่มาก โดยพื้นฐานแล้ว จะไม่มีทรัพยากรมากนัก ดังคำกล่าวเก่าๆ ไม่ว่าจะพูดไปกี่คำก็ตาม ก็ไม่มีตัวอย่างที่เข้าใจง่าย
ในที่นี้ เราจะใช้ฟิลด์ที่ซ่อนอยู่ เพื่อบันทึก PageIndex ซึ่งเป็นหมายเลขหน้าปัจจุบัน เมื่อคลิกหน้าก่อนหน้า ค่าของมันจะลดลง อันดับแรกจะเรียกว่า 0 สิ่งหนึ่งที่ควรทราบคือหมายเลขหน้าของหน้าแรกที่นี่คือ 0 แทน 1 มาดูโค้ดกันดีกว่า แล้วเราจะมาวิเคราะห์กัน!
1<asp:GridView ID = "NewsGrid" runat = "เซิร์ฟเวอร์" AutoGenerateColumns = "False" AllowPaging = "false" ความกว้าง = "100%">
2 <คอลัมน์>
3 <asp:BoundField DataField="NewsId" HeaderText="NewsID"/>
4 <asp:HyperLinkField DataNavigateUrlFields="NewsId" DataNavigateUrlFormatString="~/Details.aspx?ID={0}"
5 DataTextField = "หัวข้อ" HeaderText = "ชื่อข่าว" ItemStyle-Width = "70%"/>
6 <asp:BoundField DataField="PostTime" HeaderText="เวลาโพสต์"/>
7 <asp:CommandField HeaderText = "การจัดการข่าว" ShowCancelButton = "เท็จ" ShowDeleteButton = "จริง"
8 ShowEditButton="จริง"/>
9 </คอลัมน์>
10 </asp:GridView>
11 <div style=" height:16px; padding-top:5px; margin-right:30px; float:right">
12 <asp:HiddenField ID="CurrentPage" runat="เซิร์ฟเวอร์" ค่า="0"/>
13 <asp:LinkButton ID="First" runat="server" CommandArgument="first" OnClick="PagerButton_Click">หน้าแรก</asp:LinkButton>
14 <asp:LinkButton ID="Prev" runat="server" CommandArgument="prev" OnClick="PagerButton_Click">หน้าก่อนหน้า</asp:LinkButton>
15 <asp:LinkButton ID="ถัดไป" runat="server" CommandArgument="next" OnClick="PagerButton_Click">หน้าถัดไป</asp:LinkButton>
16 <asp:LinkButton ID="Last" runat="server" CommandArgument="last" OnClick="PagerButton_Click">หน้าสุดท้าย</asp:LinkButton>
17 </div> รหัสในไฟล์ CS:
1 โมฆะที่ได้รับการป้องกัน PagerButton_Click (ผู้ส่งวัตถุ EventArgs e)
2 {
3 int pageIndx = Convert.ToInt32(CurrentPage.Value);
4 int รวม = NewsManager.GetNews(0, pageSize).TotalRecords;
5 int หน้า = (ผลรวม % ขนาดหน้า) == 0 ? (ผลรวม / ขนาดหน้า) : (ผลรวม / ขนาดหน้า + 1);
6 string arg = ((LinkButton)ผู้ส่ง).CommandArgument.ToString().ToLower();
7 สวิตช์ (หาเรื่อง)
8 {
9 กรณี "ก่อนหน้า":
10 ถ้า (pageIndx > 0)
11 {
12 หน้าIndx -= 1;
13}
14 พัก;
15 กรณี "ถัดไป":
16 ถ้า (pageIndx < หน้า - 1)
17 {
18 หน้าIndx += 1;
19}
20 พัก;
21 กรณี "สุดท้าย":
22 pageIndx = หน้า - 1;
23 พัก;
24ค่าเริ่มต้น:
25 หน้าIndx = 0;
26 พัก;
27}
28 CurrentPage.Value = pageIndx.ToString();
29 NewsGrid.DataSource = NewsManager.GetNews(pageIndx, pageSize).Entities;
30 NewsGrid.DataBind();
31}
มันไม่ง่ายเลยใช่ไหม คุณจะเข้าใจหลังจากอ่านโค้ดแล้ว ฉันจะไม่ลงรายละเอียดเกี่ยวกับการใช้ปุ่มเพื่อส่งผ่านพารามิเตอร์ที่นี่ นอกจากนี้ยังมีแอตทริบิวต์ Entities ใน <<Application class EntitySet ใช้ฟังก์ชันทั่วไปที่คล้ายกัน> > สามารถพบได้ที่นี่ในบทความ
http://www.cnblogs.com/xdotnet/archive/2006/09/29/gridview_paging_myself.html