参照了多位高手的文章,主要觉得最重要是分页最好用存储过程来处理,返回当前页数据的DataSet。
存储过程如下:
CREATE PROCEDURE dbo.sp_info_page2
(
@pagesize int,
@currpage int
)
as
begin
DECLARE @sqlText AS nvarchar(4000)
if (@currpage=1) set @sqlText='select top '+CAST((@pagesize) as varchar(30))+' * FROM TBL_INFO ORDER BY INFOID DESC'
ELSE
set @sqlText='select top '+CAST((@pagesize) as varchar(30))+' * FROM tbl_info
WHERE (infoid<(SELECT MIN(infoid)
FROM (SELECT TOP '+CAST((@pagesize*(@currpage-1)) as varchar(30))+' infoid
FROM tbl_info
ORDER BY infoid desc) AS T)) ORDER BY infoid desc'
EXEC(@sqlText)
end
GO
其中主要思路参考http://blog.csdn.net/lihonggen0/archive/2004/09/14/103511.aspx 的第二种方案。
考虑到大多数内容都需要对ID字段进行倒序,所以将存储过程进行了一定的修改。
在通过存储过程返回的DataSet之后,你只需要控制分页标示符就可以了。
首先读取整个整个数据的条目总和,取得总数,再按照页面大小获得页面分页导航字符串。
strPageControl="<a href=info.aspx?currpage=1>首页</a> ";
if (intCurrPageNo!=1) strPageControl=strPageControl+"<a href=info.aspx?currpage="+Convert.ToString(intCurrPageNo-1)+">上一页</a> ";
else strPageControl=strPageControl+"上一页 ";
if (intCurrPageNo!=intPageCount)
{
strPageControl=strPageControl+"<a href=info.aspx?currpage="+Convert.ToString(intCurrPageNo+1)+">下一页</a> ";
strPageControl=strPageControl+"<a href=info.aspx?currpage="+Convert.ToString(intPageCount)+">末页</a>";
}
else
{
strPageControl=strPageControl+"下一页 末页";
}
请各位高手执教。
本文地址:http://com.8s8s.com/it/it7399.htm