日期:2014-05-20  浏览次数:21026 次

gridview怎么用包括分页读取数据
gridview怎么用包括分页读取数据

------解决方案--------------------
实跟Web里面的DataGrid分页差不多的,更确切的说要比Web里面更简单一些,这就要看你对分页的原理了不了解了。

可以用微软提供的DataGrid控件来解决分页问题,不需要使用第三方控件。
楼主可以先到我的小论坛去熟悉一下分页的基本概念。(显示帖子页面,查看回复页面)
www.xproer.com/bbs
然后我再跟你讲解一下目前最简单的一种分页方法。

通常我们为了考虑分页SQL语句的性能,最好使用四个按钮来实现分页。
首页,上一页,下一页,尾页
这四个按钮事件内部分页用四条SQL语句来实现从数据库中读取相应的数据。

通常我们的数据表中有ID列,这个基本上是用来分页的。如果我们的数据显示形式是从最新的到最旧的显示方式:
ID显示:
100
99
98
97
96
95
94
93
92
91
90
89
88
87
86
85
84
83

毫无疑问,首页是前10条(假设一页显示10条数据)是从100开始到91,这个SQL最简单:

select top 10 from Table1 order by ID DESC (这个这是首页的SQL语句)

那么下一页就是ID要比91小的前10条数据,

select top 10 from Table1 where ID <@ID order by ID DESC (这是下一页SQL语句)

尾页SQL语句也是超简单

select top 10 from Table1 order by ID ASC (这个是尾页)

上一页SQL语句

select top 10 from Table1 where ID> @ID order by ID DESC (上一页SQL语句)

好了,基本分页SQL语句搞定了,那么重要的就是如何取到这些ID值,我们可以将数据读取前台,通过JS获取这些相应的ID值,然后传给服务端控件,这样我们就可以轻松的实现分页了。

基本上这算得上是最简单的分页了同时也是效率最高的,因为还有一些SQL语句,比如
select top @PageSize * from (select top @DataCount * from AdminTB order by ID ASC)a order by ID DESC; ");

原理:
假设有30条数据:
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30

现在我们要取中间的10条数据,则SQL语句要这样写
select top 10 * from (select top 20 * from AdminTB order by ID ASC) order by ID DESC; ");
实际上的效果如下
(1,2,3,4,5,6,7,8,9,[ 10,11,12,13,14,15,16,17,18,19,20 ]),21,22,23,24,25,26,27,28,29,30

select top 20 * from AdminTB order by ID ASC是取得 () 部分数据
select top 10 * from (select top 20 * from AdminTB order by ID ASC) order by DESC;取得是 [] 部分。这下明白了吧


不过遗憾的是这种分页是效率最低的,因为 @DataCount 会随着你的数据增加而增大,所以我们提倡用第一种,也就是我上面讲的。
Top
回复人:spkl1(柏芝你走吧我放不下韩红就叫我朝伟吧虽然歌唱得像学友) ( 一级(初级)) 信誉:100 2007-1-10 21:54:15 得分:0
?

楼上给的的确没错误``不过我想问下``我的数据库有1000万条数据,你执行一次分页难道就要用SQL语句来查一次数据库嘛``你要明白,你应该正确评估每一次分页造成的查询对数据库的压力到底有多大,我的建议是用每次查询直接操作dataset

楼主也可以去看下我的Blog中的代码
Top
回复人:hq2008() ( 二级(初级)) 信誉:100 2007-1-19 18:32:12 得分:0
?

g
Top
回复人:cocosoft() ( 两星(中级)) 信誉:116 2007-1-19 18:36:48 得分:0
?

http://support.microsoft.com/kb/307710/zh-cn
Top
回复人:zhzuo(秋枫) ( 四星(高级)) 信誉:110 2007-1-20 22:49:49 得分:0
?

使用 Visual C# .NET 对 DataGrid Windows 控件执行分页
http://support.microsoft.com/default.aspx?scid=kb;zh-cn;307710
Top
回复人:songsu(松鼠) ( 三级(初级)) 信誉:98 2007-1-25 13:08:51 得分:0
?

每次查询都使用SQL这是必然的
用DataSet也行,但是应确定用DataSet取多少数据,这些数据保存多长时间的问题。1000万条数据,你不可能全部取吧。
另外一点看你是做的什么项目?如果是做门户性质的网站,用户访问次数多的话那就不太可能用DataSet,因为服务器的内存是非常贵的,只需要十几位用户你的内存就会被全部吃光。