博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用AspNetPager与GridView完成分页
阅读量:6241 次
发布时间:2019-06-22

本文共 3007 字,大约阅读时间需要 10 分钟。

由于GridView的分页功能实在是太弱了,所以需要使用强大的AspNetPager来作为分页控件。最简单的办法就是GridView控件下面接着放一个AspNetPager控件,但是这样好像就不能用GridView的分页功能了。在数据量不大的情况下,使用GridView的分页是十分方便有效的。另外还有一个问题就是分页控件在GridView生成的表格的下面,而没有像GridView自带分页那样包含到表格内部,这点也不是很爽。

要解决以上的问题,可以将AspNetPager放入GridView的分页模板(PagerTemplate)中,如下代码所示:

<
asp:GridView ID
=
"
GridView1
"
 runat
=
"
server
"
 AutoGenerateColumns
=
"
False
"
 AllowPaging
=
"
True
"
>
    
<
Columns
>
        
<
asp:BoundField DataField
=
"
DmId
"
 HeaderText
=
"
序号
"
 ReadOnly
=
"
True
"
 SortExpression
=
"
DMID
"
 
/>
        ……
        ……
    
</
Columns
>
    
<
PagerStyle HorizontalAlign
=
"
Center
"
 
/>
    
<
PagerTemplate
>
        
<
asp:AspNetPager ID
=
"
AspNetPager1
"
 runat
=
"
server
"
 ShowBoxThreshold
=
"
5
"
 ShowPageIndexBox
=
"
Auto
"
 CenterCurrentPageButton
=
"
True
"
>
        
</
asp:AspNetPager
>
    
</
PagerTemplate
>
</
asp:GridView
>
 

 

但是这样做要解决几个问题:

(1)这个GridView每一页的行数AspNetPager并不知道。解决办法:为AspNetPager添加属性PageSize="<%# ((GridView)Container.NamingContainer).PageSize%>"

(2)这个GridView绑定的总记录数AspNetPager也不知道。解决办法:为AspNetPager添加属性RecordCount="<%#((IList)(((GridView)Container.NamingContainer).DataSource)).Count %>"

(3)这个GridView当前在第几页AspNetPager也不知道。这个问题的解决可不像前面那么简单了,通过设置属性CurrentPageIndex的方式AspNetPager根本不认!(估计是AspNetPager的一个Bug吧)要解决这个问题就只有在每次翻页时后台代码中为AspNetPager设置CurrentPageIndex属性。

(4)使用AspNetPager后GridView并不会触发PageChanging事件。但是要触发AspNetPager的PageChanging事件,所以可以为分页模板中的AspNetPager控件添加事件处理:OnPageChanging="AspNetPager1_PageChanging",对应的就是分页的后台代码:

protected
 
void
 AspNetPager1_PageChanging(
object
 src, Wuqi.Webdiyer.PageChangingEventArgs e)
{
    
this
.GridView1.PageIndex 
=
 e.NewPageIndex 
-
 
1
;
//
这儿需要注意,AspNetPager中的PageIndex是从1开始的,而GridView的是从0开始的,所以要减1.
    Bind();
//
GridView的数据绑定方法
    Wuqi.Webdiyer.AspNetPager pager 
=
 
this
.GridView1.BottomPagerRow.FindControl(
"
AspNetPager1
"
as
 Wuqi.Webdiyer.AspNetPager;
    pager.CurrentPageIndex 
=
 e.NewPageIndex;
//
这里就是为了解决前面的第3个问题。

 

OK,以上4个问题都解决了,我们的GridView+AspNetPager的分页就完成了!另外如果觉得AspNetPager的样式不好看可以再定义一下CSS。最后完整的代码是:

<
asp:GridView ID
=
"
GridView1
"
 runat
=
"
server
"
 AutoGenerateColumns
=
"
False
"
 AllowPaging
=
"
True
"
>
    
<
Columns
>
        
<
asp:BoundField DataField
=
"
DmId
"
 HeaderText
=
"
序号
"
 ReadOnly
=
"
True
"
 SortExpression
=
"
DMID
"
 
/>
        ……
        ……
    
</
Columns
>
<
PagerStyle CssClass
=
"
GridViewPager
"
 HorizontalAlign
=
"
Center
"
 
/>
    
<
PagerTemplate
>
        
<
asp:AspNetPager ID
=
"
AspNetPager1
"
 runat
=
"
server
"
 ShowBoxThreshold
=
"
5
"
 ShowPageIndexBox
=
"
Auto
"
        PageSize
=
"
<%# ((GridView)Container.NamingContainer).PageSize%>
"
 OnPageChanging
=
"
AspNetPager1_PageChanging
"
        RecordCount
=
"
<%#((IList)(((GridView)Container.NamingContainer).DataSource)).Count %>
"
        CenterCurrentPageButton
=
"
True
"
>
        
</
asp:AspNetPager
>
    
</
PagerTemplate
>
</
asp:GridView
>
//
以下是后台代码
protected
 
void
 AspNetPager1_PageChanging(
object
 src, Wuqi.Webdiyer.PageChangingEventArgs e)
{
    
this
.GridView1.PageIndex 
=
 e.NewPageIndex 
-
 
1
;
    Bind();
    Wuqi.Webdiyer.AspNetPager pager 
=
 
this
.GridView1.BottomPagerRow.FindControl(
"
AspNetPager1
"
as
 Wuqi.Webdiyer.AspNetPager;
    pager.CurrentPageIndex 
=
 e.NewPageIndex;

转载地址:http://fmcia.baihongyu.com/

你可能感兴趣的文章
函数适配器bind2nd 、mem_fun_ref 源码分析、函数适配器应用举例
查看>>
武汉科技大学ACM :1002: A+B for Input-Output Practice (II)
查看>>
extjs中form.reset(true)出现的bug修复
查看>>
Some Android functions
查看>>
ORB-SLAM2学习4 initializer.h
查看>>
正向代理和反向代理
查看>>
1092 回文字符串(LCSL_DP)
查看>>
day01-Python介绍,安装,idea
查看>>
AX函数,将EXCEL列号转为列名
查看>>
UNDO -- Concept
查看>>
养生《一》
查看>>
es6的模块化--AMD/CMD/commonJS/ES6
查看>>
DevStack部署Openstack环境
查看>>
新年最新的100句超牛的语言(转)
查看>>
Chromium Graphics: Graphics and Skia
查看>>
asp.net core mvc上传大文件解决方案
查看>>
二叉树
查看>>
十分简单的抛物线运动
查看>>
乘法逆元(转)
查看>>
android repo库的创建及代码管理
查看>>