【转】自定义GridView分页模板

【转自】http://www.cnblogs.com/Jinglecat/archive/2006/06/13/424794.html

 

 

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)
ExpandedBlockStart.gifContractedBlock.gif    
{
        GridView theGrid 
= sender as GridView;  // refer to the GridView
        int newPageIndex = 0;

ExpandedSubBlockStart.gifContractedSubBlock.gif        
if (-2 == e.NewPageIndex) // when click the "GO" Button
            TextBox txtNewPageIndex = null;
            //GridViewRow pagerRow 
= theGrid.Controls[0].Controls[theGrid.Controls[0].Controls.Count - 1as GridViewRow; // refer to PagerTemplate
GridViewRow pagerRow = theGrid.BottomPagerRow; //GridView较DataGrid提供了更多的API,获取分页块可以使用
BottomPagerRow 或者 TopPagerRow,当然还增加了HeaderRow和FooterRow
//updated at 2006年6月21日3:15:33

ExpandedSubBlockStart.gifContractedSubBlock.gif            
if (null != pagerRow) {
                txtNewPageIndex 
= pagerRow.FindControl("txtNewPageIndex"as TextBox;   // refer to the TextBox with the NewPageIndex value
            }


ExpandedSubBlockStart.gifContractedSubBlock.gif            
if (null != txtNewPageIndex) {
                newPageIndex 
= int.Parse(txtNewPageIndex.Text) - 1// get the NewPageIndex
            }

        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
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增加部分处理逻辑。

 

转载于:https://www.cnblogs.com/yencain/articles/1263806.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值