GridView有AllowPaging属性设置为True 即可实现分页,但是使用这种分页方式效率太低 当数据量很大时会严重影响用户体验,所以有必要让程序员自己写一个分页程序。
原理是让用户传入指定的页面索引数pageindex 和每个页面的信息条数 pagesize 来从数据库中获取指定区间内的数据信息。
前台首先在前台声明几个linkbutton
<
asp
:
LinkButton
ID
="btnFirst"
runat
="server"
onclick
="btnFirst_Click">
第一页
</
asp
:
LinkButton
>
<
asp
:
LinkButton
ID
="btnPre"
runat
="server"
onclick
="btnPre_Click">
上一页
</
asp
:
LinkButton
>
<
asp
:
LinkButton
ID
="btnNext"
runat
="server"
onclick
="btnNext_Click">
下一页
</
asp
:
LinkButton
>
<
asp
:
LinkButton
ID
="btnLast"
runat
="server">
最后一页
</
asp
:
LinkButton
>
后台代码中最核心的是 sql语句。首先我们需要一个列,他需要保证数据中的数据是连续不断的 如123456。这样我需要用到
ROW_NUMBER() over(order by Id) 详见开窗函数
string cmdstring = "select T1.indexs,T1.NewsTitle,SUBSTRING(T1.NewsContent,0,20)+'......' AS NewsContent,T2.RealName,T3.ClassName,T1.CreateTime from (select ROW_NUMBER() over(order by Id) as indexs,* from T_News1 ) AS T1 join T_User AS T2 on T1.NewsCreator=T2.UserId join T_NewsClass AS T3 on T1.ClassId=T3.ClassId where T1.indexs between (@pageindex-1) * @pagesize + 1 and @pageindex * @pagesize";
cmd.Parameters.AddWithValue(
"@pageSize"
, 30);
cmd.Parameters.AddWithValue(
"@pageIndex"
,(
int
)ViewState[
"pageindex"
]); 这里为什么用ViewState。因为
ViewState不会随着事件回发而重新声明,这样在事件回发后还会保留事件回发前的值。这点对于后面改变pageindex会很有帮助
在linkbutton事件中为 viewstate++ 或--