如果数据量很大 那么对分页的性能要求就很高 目前简易操作的分页控件已经不能满足这个需求,目前考虑到数据量和性能的分页方式就是存储过程分页 存储过程分页的原理就是 根据PageSize(例如 PageSize=30)来每次只取出30条数据 当翻页时在读取出后30条数据 这样不管数据量多大 也只会消耗读取30条记录的流量 对程序整体性能很有帮助
存储过程分页代码:
代码
CREATE PROCEDURE GetRecordFromPage
@tblName varchar(255),--表名
@fldName varchar(255),--字段名这里测试了一下,只能一个字段,
@PageSize int=10,--每页多少条
PageIndex int=1,--以后表现页
@OrderType bit=0,--设置排序范例,非0值则降序
@strWhere varchar(2000)=''--查问前提(把稳:不要加where)
AS
declare @strSQL varchar(6000)--主语句
declare @strTmp varchar(1000)--临时变量
declare @strOrder varchar(500)--排序范例
if @OrderType!=0
begin
set @strTmp='<(selectmin'set @strOrder='order by ['+@fldName+']desc'
end
else
begin
set @strTmp='>(selectmax'set@strOrder='orderby['+@fldName+']asc'
end
set @strSQL='select top'+str(@PageSize)+'*from['+@tblName+']where['+@fldName+']'+@strTmp+'(['+@fldName+'])from
(selecttop'+str((@PageIndex-1)*@PageSize)+'['+@fldName+']from['+@tblName+']'+@strOrder+')as tblTmp)'+@strOrder
if @strWhere!=''
set @strSQL='selecttop'+str(@PageSize)+'*from['+@tblName+']
where['+@fldName+']'+@strTmp+'(['+@fldName+'])from(selecttop'+str((@PageIndex-1)*@PageSize)+'['+@fldName+']from['+@tblName+']
where'+@strWhere+''+@strOrder+')astblTmp)
and'+@strWhere+''+@strOrder
if@PageIndex=1
begin
set @strTmp=''
if @strWhere!=''
set @strTmp='where('+@strWhere+')'set@strSQL='selecttop'+str(@PageSize)+'*from['+@tblName+']'+@strTmp+''+@strOrderendexec(@strSQL)
GO
PS:参数以标明含义 调用时只需传入对应的参数就OK 分页最好弄个这样样式的分页
如果还需要具体程序代码 可以百度HI我 希望有帮助~
去网上搜,各种的分页代码多的是
建议去CSDN上看看。。
1.添加六个按钮
当前页码:
总页码:
2.定义一个分页方法:
public void dlBind(int count, DataSet ds, Label lblPage, Label lblTag, LinkButton lbtnOne, LinkButton lbtnUp, LinkButton lbtnNext, LinkButton lbtnBack, GridView gvewAll)
{
int curpage = Convert.ToInt32(lblPage.Text);
PagedDataSource ps = new PagedDataSource();
ps.DataSource = ds.Tables[0].DefaultView;
ps.AllowPaging = true;
ps.PageSize = count;
ps.CurrentPageIndex = curpage - 1;
lbtnOne.Enabled = true;
lbtnUp.Enabled = true;
lbtnNext.Enabled = true;
lbtnBack.Enabled = true;
if (curpage == 1)
{
lbtnOne.Enabled = false;
lbtnUp.Enabled = false;
}
else if (curpage == ps.PageCount)
{
lbtnNext.Enabled = false;
lbtnBack.Enabled = false;
}
lblTag.Text = ps.PageCount.ToString();
gvewAll.DataSource = ps;
gvewAll.DataBind();
}
3.调用方法:
private void NewsPage()
{
SqlConnection conn = SqlHelper.GetConnectionString("WareHouse");
DataSet ds = new DataSet();
ds = SqlHelper.ExecuteDataset(conn,CommandType.Text,"select * from T_kucun");
Validate vali = new Validate();
vali.dlBind(2, ds, lblPage, lblTag, lbtnOne, lbtnUp, lbtnNext, lbtnBack, gvewStock);
}
4.对按钮的事件:
protected void lbtnOne_Click(object sender, EventArgs e)
{
lblPage.Text = "1";
NewsPage();
}
protected void lbtnUp_Click(object sender, EventArgs e)
{
lblPage.Text = Convert.ToString(Convert.ToInt32(lblPage.Text)-1);
NewsPage();
}
protected void lbtnNext_Click(object sender, EventArgs e)
{
lblPage.Text = Convert.ToString(Convert.ToInt32(lblPage.Text)+1);
NewsPage();
}
protected void lbtnBack_Click(object sender, EventArgs e)
{
lblPage.Text = lblTag.Text;
NewsPage();
}
5.sqlhelper是我添加的连接数据库的方法,你可以自己用其他方法加一个连接数据库,这种方法你试试,我都是这样做的,其中的2是每页显示的数据条为2,你也可以改其他的数