datagrid翻页的时候到底有没有再次查询数据库?
用asp.net的datagrid默认的翻页方案,翻页的时候,有没有再次连接到数据库?
如果是的话,默认的翻页方案真的是太糟糕了!
问题点数:20、回复次数:27Top
1 楼alison()回复于 2006-03-17 17:47:06 得分 0
肯定有,然后取指定页的数据Top
2 楼xuanyuanfeixue(轩辕飞雪)回复于 2006-03-18 09:42:59 得分 0
应该不会吧,传给datagrid只是数据源呀
况且它怎样去连接数据库啊
如果连接的话怎么知道你需要哪些数据呀Top
3 楼truecoffeefox(咖啡狐)回复于 2006-03-18 09:48:42 得分 0
没有啊,它是在离线的dataset里读取数据,这个时候数据库里有什么变化它不会呈现出来,除非你去刷新它的数据Top
4 楼youyuan1980(水云间)回复于 2006-03-18 10:42:33 得分 0
没有。因为已经推到了dt中了,不可能再读取数据库,就算是读也是读的dt中的内容。Top
5 楼boy_north(北方的豹子)回复于 2006-03-18 10:44:44 得分 0
肯定没有了Top
6 楼jyk(今天由我来写的代码,明天就让程序自己完成!喜欢编程。和气生财。共同提高。共同进步!)回复于 2006-03-18 10:52:00 得分 0
1、你要写翻页事件
2、在事件里你要执行 DataBind()函数,而且你还要再次负数据源。
你不做以上两件事情,你还能翻页吗?
是否连接数据库要看你是怎么处理 dt 的 ,dt放在session中,就不用再次访问数据库了,Top
7 楼jimu8130(火箭的未来在哪里?)回复于 2006-03-18 11:10:29 得分 0
你可以做个试验,页面中有个datagrid然后读取数据库数据到datagrid绑定,运行后查看其html页面,可以发现其中有个_viewstate后面跟着很多东西,其中就包括datagrid所绑定的数据源的数据。所以默认翻页是没有再次查询数据库,当然如果你主动查了就不算。
Top
8 楼xuanyuanfeixue(轩辕飞雪)回复于 2006-03-18 11:31:17 得分 0
我刚才说胡说了,不好意思^_^Top
9 楼xuanyuanfeixue(轩辕飞雪)回复于 2006-03-18 11:36:40 得分 0
我想两种都有可能
主要是看你是如何绑定它的数据源的了
如果用DataSet保存数据源应该就不用了
如果是每次从数据库读的话,肯定就是了Top
10 楼fanglibang(小久)回复于 2006-03-18 11:39:33 得分 0
肯定没有啊。。都把数据放入dataSet里了。Top
11 楼centralplains(中原大地)回复于 2006-04-03 09:11:43 得分 0
根据我的实验是再次连接数据库的,可以在翻页前断掉数据库,然后翻页,我实验过,他需要再次连接的.Top
12 楼boyd1985(波伊德乐园->http://www.boyd.cn)回复于 2006-04-03 09:16:18 得分 0
肯定没有Top
13 楼MyNoName(阿呆)回复于 2006-04-07 17:39:53 得分 0
真是众说纷纭哦!Top
14 楼sunzhong2003()回复于 2006-04-07 21:08:27 得分 0
数据量大时候,我觉得有必要一页一页取。ASPNETPAGE就是利用这种方式
Top
15 楼hchxxzx(NET?摸到一点门槛)回复于 2006-04-07 21:17:25 得分 0
当然有了.
想想看,dataSet在第一次求取的时候,它确实是把所有要分页的数据取出来了.但问题是在翻页的时候,也就是页面已经提交了,此时,上一个页面中所求取的dataSet,并不可能保持现状,为了显示数据,必须需要再次从数据库中提取数据进行填充,然后再绑定到控件中.
dataSet在这其中的作用,就是根据当前的页数,从若干数据中取出需要的部分数据对控件进行填充.
当然,我们可以通过一定的方式,达到不用再次从数据库中提取的目的,那就是把dataSet也存储在VIEWSTATE里,如此,在翻页后,从VIEWSTATE里面再次把dataSet复原回来,就不需要再次读取数据,但这样又带来一个很大的问题,即页面文件变得非常庞大,导致页面提交的速度变慢.
因此,最好的方式,是需要哪些数据,就取哪些数据,取出之后再进行填充.Top
16 楼Rail100(杀神之狙)(能忘掉结果,未能忘记遇上)回复于 2006-04-07 22:10:40 得分 0
数据量不大以及用户不多时,可以用默认的翻页。
否则用虚拟分页,每页的数据每次抓取。
传输大量数据会比每次查询数据库更慢,尽量不要用默认的翻页,适当使用缓存可以提高速度。Top
17 楼lindping(罗将神)回复于 2006-04-07 22:13:09 得分 10
真是惊讶,居然有这么多人认为 datagrid不用再取数据!
我很想骂你们一句白痴的,呵呵,忍不住啊。
1翻页回传的时候,你如果不重新取数据绑定到datagrid里,datagrid从哪里取得数据?从dataset取?dataset是内存变量,不是可以保持状态的控件,回传之后不重新定义赋值就没有了!Top
18 楼zhouheng123456(授之以鱼,不如授之以渔)回复于 2006-04-07 22:30:12 得分 0
把数据缓存起来.
分页的时候去读他.
当有insert操作时去更新这个缓存起来的数据..
明白?不明白继续问.
回答到你明白为止.Top
19 楼windbey(北风)回复于 2006-04-07 23:38:51 得分 0
比如说有 1KW 条记录,那怎么存在缓存或内存中啊。
即使是绑定数据源了,那不就是等价于死机吗Top
20 楼lindping(罗将神)回复于 2006-04-08 00:04:59 得分 0
缓存无非就是cache[] 或者定义静态或者applicationg[],但都是全局变量,多人同时访问就会出毛病。Top
21 楼puny(寒束)回复于 2006-04-08 07:16:16 得分 0
翻页的时候应该是要读数据库的,除非把整个数据源缓存起来,后面分页的时候再从缓存中取
这样子做相当不好
以前也我用datagrid分页都是存储分页,每次只返回当前页的数据;后来我觉得datagrid太笨重了,现在都是用table来手写存储分页(封装成控件),自己想怎么写就怎么写,用起来很舒服Top
22 楼flyinging(一路走来)回复于 2006-04-08 08:49:49 得分 0
看你的数据源是什么了,是datareader的话,会重新查询,dataset的话,刚不会重新连数据库Top
23 楼jonas20()回复于 2006-04-08 09:14:06 得分 0
看你的数据源是什么了,是datareader的话,会重新查询,dataset的话,刚不会重新连数据库
Top
24 楼jyk(今天由我来写的代码,明天就让程序自己完成!喜欢编程。和气生财。共同提高。共同进步!)回复于 2006-04-08 12:45:33 得分 10
>>真是惊讶,居然有这么多人认为 datagrid不用再取数据!
>>我很想骂你们一句白痴的,呵呵,忍不住啊。
>>1翻页回传的时候,你如果不重新取数据绑定到datagrid里,datagrid从哪里取得数据?从dataset取?dataset是内存变量,不是可以保持状态的控件,回传之后不重新定义赋值就没有了!
严重同意!Top
25 楼dcj2006(无花果)回复于 2006-04-08 13:02:15 得分 0
这个问题就是在问:
今天天气很好,美女会不会爱我?Top
26 楼ying1234()回复于 2006-04-09 13:42:14 得分 0
当然不行了,你当是做winform程序啊。Top
27 楼MyNoName(阿呆)回复于 2006-04-25 16:57:39 得分 0
揭帖!Top




