参照了多位高手的文章,主要觉得最重要是分页最好用存储过程来处理,返回当前页数据的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+"下一页 末页"; }
请各位高手执教。 
|