实现GridView的自定义分页
GridView自带几种分页,如果不能满足要求的话,可以看看下面的代码
<asp:GridView ID="gvNewsList" AllowPaging="true" OnPageIndexChanging="gvNewsList_PageIndexChanging" PageSize="1" style="BORDER-RIGHT: medium none; BORDER-LEFT: medium none; WORD-BREAK: break-all" runat="server" AutoGenerateColumns="False" Width="96%" HorizontalAlign="Center" CellPadding="4" CssClass="border" ForeColor="#333333" GridLines="Both" BorderColor="black">
<HeaderStyle BackColor="#507CD1" BorderWidth="0px" CssClass="table04bg" Font-Bold="True" ForeColor="black" />
<Columns>
<asp:CheckBoxField HeaderText="选择" />
<asp:BoundField DataField="Newsid" HeaderText="编号" />
<asp:HyperLinkField DataTextField="title" HeaderText="标题" />
<asp:BoundField DataField="ClassName" HeaderText="类别" />
<asp:BoundField DataField="update_date" HeaderText="更新时间" />
</Columns>
<RowStyle BackColor="white" HorizontalAlign="center" BorderColor="black" Font-Names="宋体"/>
<pagertemplate>
<table width="100%">
<tr>
<td style="text-align:right">
第<asp:Label id="lblPageIndex" runat="server" text='<%# ((GridView)Container.Parent.Parent).PageIndex + 1 %>' />页
共/<asp:Label id="lblPageCount" runat="server" text='<%# ((GridView)Container.Parent.Parent).PageCount %>' />页
<asp:linkbutton id="btnFirst" runat="server" causesvalidation="False" commandargument="First" commandname="Page" text="首页" />
<asp:linkbutton id="btnPrev" runat="server" causesvalidation="False" commandargument="Prev" commandname="Page" text="上一页" />
<asp:linkbutton id="btnNext" runat="server" causesvalidation="False" commandargument="Next" commandname="Page" text="下一页" />
<asp:linkbutton id="btnLast" runat="server" causesvalidation="False" commandargument="Last" commandname="Page" text="尾页" />
<asp:textbox id="txtNewPageIndex" runat="server" width="20px" text='<%# ((GridView)Container.Parent.Parent).PageIndex + 1 %>' />
<asp:linkbutton id="btnGo" runat="server" causesvalidation="False" commandargument="-1" commandname="Page" text="GO" /><!-- here set the CommandArgument of the Go Button to '-1' as the flag -->
</td>
</tr>
</table>
</pagertemplate>
<PagerStyle BackColor="#507CD1" BorderWidth="0px" CssClass="table04bg" Font-Bold="True" ForeColor="black" />
</asp:GridView>
<HeaderStyle BackColor="#507CD1" BorderWidth="0px" CssClass="table04bg" Font-Bold="True" ForeColor="black" />
<Columns>
<asp:CheckBoxField HeaderText="选择" />
<asp:BoundField DataField="Newsid" HeaderText="编号" />
<asp:HyperLinkField DataTextField="title" HeaderText="标题" />
<asp:BoundField DataField="ClassName" HeaderText="类别" />
<asp:BoundField DataField="update_date" HeaderText="更新时间" />
</Columns>
<RowStyle BackColor="white" HorizontalAlign="center" BorderColor="black" Font-Names="宋体"/>
<pagertemplate>
<table width="100%">
<tr>
<td style="text-align:right">
第<asp:Label id="lblPageIndex" runat="server" text='<%# ((GridView)Container.Parent.Parent).PageIndex + 1 %>' />页
共/<asp:Label id="lblPageCount" runat="server" text='<%# ((GridView)Container.Parent.Parent).PageCount %>' />页
<asp:linkbutton id="btnFirst" runat="server" causesvalidation="False" commandargument="First" commandname="Page" text="首页" />
<asp:linkbutton id="btnPrev" runat="server" causesvalidation="False" commandargument="Prev" commandname="Page" text="上一页" />
<asp:linkbutton id="btnNext" runat="server" causesvalidation="False" commandargument="Next" commandname="Page" text="下一页" />
<asp:linkbutton id="btnLast" runat="server" causesvalidation="False" commandargument="Last" commandname="Page" text="尾页" />
<asp:textbox id="txtNewPageIndex" runat="server" width="20px" text='<%# ((GridView)Container.Parent.Parent).PageIndex + 1 %>' />
<asp:linkbutton id="btnGo" runat="server" causesvalidation="False" commandargument="-1" commandname="Page" text="GO" /><!-- here set the CommandArgument of the Go Button to '-1' as the flag -->
</td>
</tr>
</table>
</pagertemplate>
<PagerStyle BackColor="#507CD1" BorderWidth="0px" CssClass="table04bg" Font-Bold="True" ForeColor="black" />
</asp:GridView>
上面代码中<pagertemplate>与</pagertemplate>之间为自定义分页,下面看一下触发的事件代码
1protected void gvNewsList_PageIndexChanging(object sender, GridViewPageEventArgs e)
2 {
3 GridView theGrid = sender as GridView; // refer to the GridView
4 int newPageIndex = 0;
5
6 if (-2 == e.NewPageIndex)
7 { // when click the "GO" Button
8 TextBox txtNewPageIndex = null;
9 //GridViewRow pagerRow = theGrid.Controls[0].Controls[theGrid.Controls[0].Controls.Count - 1] as GridViewRow; // refer to PagerTemplate
10 GridViewRow pagerRow = theGrid.BottomPagerRow; //GridView较DataGrid提供了更多的API,获取分页块可以使用BottomPagerRow 或者TopPagerRow,当然还增加了HeaderRow和FooterRow
11 //updated at 2006年6月21日3:15:33
12
13 if (null != pagerRow)
14 {
15 txtNewPageIndex = pagerRow.FindControl("txtNewPageIndex") as TextBox; // refer to the TextBox with the NewPageIndex value
16 }
17
18 if (null != txtNewPageIndex)
19 {
20 newPageIndex = int.Parse(txtNewPageIndex.Text) - 1; // get the NewPageIndex
21 }
22 }
23 else
24 { // when click the first, last, previous and next Button
25 newPageIndex = e.NewPageIndex;
26 }
27
28 // check to prevent form the NewPageIndex out of the range
29 newPageIndex = newPageIndex <= 0 ? 0 : newPageIndex;
30 newPageIndex = newPageIndex >= theGrid.PageCount ? theGrid.PageCount-1 : newPageIndex;
31
32 // specify the NewPageIndex
33 theGrid.PageIndex = newPageIndex;
34 BindNewsList();
35 // rebind the control
36 // in this case of retrieving the data using the xxxDataSoucr control,
37 // just do nothing, because the asp.net engine binds the data automatically
38 }
2 {
3 GridView theGrid = sender as GridView; // refer to the GridView
4 int newPageIndex = 0;
5
6 if (-2 == e.NewPageIndex)
7 { // when click the "GO" Button
8 TextBox txtNewPageIndex = null;
9 //GridViewRow pagerRow = theGrid.Controls[0].Controls[theGrid.Controls[0].Controls.Count - 1] as GridViewRow; // refer to PagerTemplate
10 GridViewRow pagerRow = theGrid.BottomPagerRow; //GridView较DataGrid提供了更多的API,获取分页块可以使用BottomPagerRow 或者TopPagerRow,当然还增加了HeaderRow和FooterRow
11 //updated at 2006年6月21日3:15:33
12
13 if (null != pagerRow)
14 {
15 txtNewPageIndex = pagerRow.FindControl("txtNewPageIndex") as TextBox; // refer to the TextBox with the NewPageIndex value
16 }
17
18 if (null != txtNewPageIndex)
19 {
20 newPageIndex = int.Parse(txtNewPageIndex.Text) - 1; // get the NewPageIndex
21 }
22 }
23 else
24 { // when click the first, last, previous and next Button
25 newPageIndex = e.NewPageIndex;
26 }
27
28 // check to prevent form the NewPageIndex out of the range
29 newPageIndex = newPageIndex <= 0 ? 0 : newPageIndex;
30 newPageIndex = newPageIndex >= theGrid.PageCount ? theGrid.PageCount-1 : newPageIndex;
31
32 // specify the NewPageIndex
33 theGrid.PageIndex = newPageIndex;
34 BindNewsList();
35 // rebind the control
36 // in this case of retrieving the data using the xxxDataSoucr control,
37 // just do nothing, because the asp.net engine binds the data automatically
38 }
注意代码中最后的内容,一定要从新绑定 GridView这样分页才能够生效