自定义GridView分页模板

来源:互联网 发布:网络直播下载 编辑:程序博客网 时间:2024/06/11 20:01
作者tag:.net c# datagrid windows/.net gridview 精髓 .net c#基础语法 .net 控件-web基本控件 .net 专题-报表图表 .net 专题-数据控件-gridview .net c#精髓【月儿原创】 .net 专题-数据控件-datagrid .net 技术-ado.net 数据访问 CSDN 推荐tag:w3c sqlcon tcheader 代码 boundfield gridview1 数据 控件 技巧 
上一篇: ASP.NET Tricks&Tip:关于Tooltip(title)的换行问题  | 下一篇: DataGridView 密码列(显示为*号)的设置

 自定义GridView分页模板

GridView较之DataGrid提供了更加强大、更加完善的功能,而且具备了丰富的可扩展功能,可以使用GridView提供的pagertemplate自定义分页模板:

事实上,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) { // when click the "GO" Button
            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 {  // when click the first, last, previous and next Button
            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增加部分处理逻辑。

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1537001

 
原创粉丝点击