自定义GridView分页模板
2006-06-13 14:12
330 查看
GridView较之DataGrid提供了更加强大、更加完善的功能,而且具备了丰富的可扩展功能,可以使用GridView提供的pagertemplate自定义分页模板:
事实上,GridView默认的几中分页样式,都是将相关按钮的CommandName设为Page,而CommandArgument设为相关参数,可接受的参数包括,first,last,prev,next,<PageIndex>(具体数字),然后按事件回溯,触发顶层的RowCommand,因此我们页可以使用这些默认的可识别的参数自定义自己的分页模板,asp.net会自动设置当前的NewPageIndex,而不需要任何的冗余代码。
.aspx页面:
PageIndexChanging处理程序:
注意到,上面的示例中,由于增加了一个跳转按钮GO,但是asp。net不支持相关的CommandArgument值,虽然可以将Go Button的Commandname设为Page,还需要手动的在PageIndexChanging增加部分处理逻辑。
事实上,GridView默认的几中分页样式,都是将相关按钮的CommandName设为Page,而CommandArgument设为相关参数,可接受的参数包括,first,last,prev,next,<PageIndex>(具体数字),然后按事件回溯,触发顶层的RowCommand,因此我们页可以使用这些默认的可识别的参数自定义自己的分页模板,asp.net会自动设置当前的NewPageIndex,而不需要任何的冗余代码。
.aspx页面:
<asp:gridview id="GridView1" runat="server" allowpaging="True" pagesize="10" autogeneratecolumns="False" datasourceid="SqlDataSource1" onpageindexchanging="GridView1_PageIndexChanging"> <columns> <asp:boundfield datafield="CompanyName" headertext="CompanyName" sortexpression="CompanyName" /> <asp:boundfield datafield="ContactTitle" headertext="ContactTitle" sortexpression="ContactTitle" /> <asp:boundfield datafield="Phone" headertext="Phone" sortexpression="Phone" /> <asp:boundfield datafield="Fax" headertext="Fax" sortexpression="Fax" /> <asp:boundfield datafield="ContactName" headertext="ContactName" sortexpression="ContactName" /> </columns> <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> </asp:gridview> <asp:sqldatasource id="SqlDataSource1" runat="server" connectionstring="Data Source=.;Initial Catalog=Northwind;Integrated Security=True" providername="System.Data.SqlClient" selectcommand="SELECT [CompanyName], [ContactTitle], [Phone], [Fax], [ContactName] FROM [Customers]"> </asp:sqldatasource>
PageIndexChanging处理程序:
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) GridView theGrid = sender as GridView; // refer to the GridView int newPageIndex = 0; if (-2 == e.NewPageIndex) TextBox txtNewPageIndex = null; //GridViewRow pagerRow = theGrid.Controls[0].Controls[theGrid.Controls[0].Controls.Count - 1] as GridViewRow; // refer to PagerTemplate GridViewRow pagerRow = theGrid.BottomPagerRow; //GridView较DataGrid提供了更多的API,获取分页块可以使用BottomPagerRow 或者TopPagerRow,当然还增加了HeaderRow和FooterRow //updated at 2006年6月21日3:15:33 if (null != pagerRow) txtNewPageIndex = pagerRow.FindControl("txtNewPageIndex") as TextBox; // refer to the TextBox with the NewPageIndex value } if (null != txtNewPageIndex) newPageIndex = int.Parse(txtNewPageIndex.Text) - 1; // get the NewPageIndex } } else newPageIndex = e.NewPageIndex; } // check to prevent form the NewPageIndex out of the range newPageIndex = newPageIndex < 0 ? 0 : newPageIndex; newPageIndex = newPageIndex >= theGrid.PageCount ? theGrid.PageCount - 1 : newPageIndex; // specify the NewPageIndex theGrid.PageIndex = newPageIndex; // rebind the control // in this case of retrieving the data using the xxxDataSoucr control, // just do nothing, because the asp.net engine binds the data automatically }
注意到,上面的示例中,由于增加了一个跳转按钮GO,但是asp。net不支持相关的CommandArgument值,虽然可以将Go Button的Commandname设为Page,还需要手动的在PageIndexChanging增加部分处理逻辑。
相关文章推荐
- 自定义GridView分页模板
- [导入]自定义GridView分页模板
- 自定义GridView分页模板
- 自定义GridView分页模板中页码Button的实现
- 自定义GridView分页模板
- 自定义GridView分页模板中页码Button的实现(上)
- 对《自定义GridView分页模板中页码Button的实现》中程序的改进,追加显示空行功能
- 自定义GridView分页模板
- 自定义GridView分页模板中页码Button的实现(下)
- 对《自定义GridView分页模板中页码Button的实现》中程序的改进,追加显示空行功能
- 自定义GridView分页模板
- 对《自定义GridView分页模板中页码Button的实现》中程序的改进,追加显示空行功能
- Asp.net学习笔记----使用GridView+ObjectDataSource进行自定义分页排序
- v9 phpcms 模板自定义分页函数
- ASPxGridview自定义分页
- 关于VS2005中GridView的自定义分页,单选、多选、排序、自增列的简单应用
- 扩展GridView控件(10) - 自定义分页样式
- GridView自定义分页样式(上一页,下一页,到第几页)(新手教程)
- 关于VS2005中GridView的自定义分页,单选、多选、排序、自增列的简单应用
- GridView 与自定义对象的绑定和分页