用asp.net的datagrid默认的翻页方案,翻页的时候,有没有再次连接到数据库?如果是的话,默认的翻页方案真的是太糟糕了!

解决方案 »

  1.   

    应该不会吧,传给datagrid只是数据源呀
    况且它怎样去连接数据库啊
    如果连接的话怎么知道你需要哪些数据呀
      

  2.   

    没有啊,它是在离线的dataset里读取数据,这个时候数据库里有什么变化它不会呈现出来,除非你去刷新它的数据
      

  3.   

    没有。因为已经推到了dt中了,不可能再读取数据库,就算是读也是读的dt中的内容。
      

  4.   

    1、你要写翻页事件2、在事件里你要执行 DataBind()函数,而且你还要再次负数据源。你不做以上两件事情,你还能翻页吗?
    是否连接数据库要看你是怎么处理 dt 的 ,dt放在session中,就不用再次访问数据库了,
      

  5.   

    你可以做个试验,页面中有个datagrid然后读取数据库数据到datagrid绑定,运行后查看其html页面,可以发现其中有个_viewstate后面跟着很多东西,其中就包括datagrid所绑定的数据源的数据。所以默认翻页是没有再次查询数据库,当然如果你主动查了就不算。
      

  6.   

    我想两种都有可能
    主要是看你是如何绑定它的数据源的了
    如果用DataSet保存数据源应该就不用了
    如果是每次从数据库读的话,肯定就是了
      

  7.   

    肯定没有啊。。都把数据放入dataSet里了。
      

  8.   

    数据量大时候,我觉得有必要一页一页取。ASPNETPAGE就是利用这种方式
      

  9.   

    当然有了.
    想想看,dataSet在第一次求取的时候,它确实是把所有要分页的数据取出来了.但问题是在翻页的时候,也就是页面已经提交了,此时,上一个页面中所求取的dataSet,并不可能保持现状,为了显示数据,必须需要再次从数据库中提取数据进行填充,然后再绑定到控件中.
    dataSet在这其中的作用,就是根据当前的页数,从若干数据中取出需要的部分数据对控件进行填充.
    当然,我们可以通过一定的方式,达到不用再次从数据库中提取的目的,那就是把dataSet也存储在VIEWSTATE里,如此,在翻页后,从VIEWSTATE里面再次把dataSet复原回来,就不需要再次读取数据,但这样又带来一个很大的问题,即页面文件变得非常庞大,导致页面提交的速度变慢.
    因此,最好的方式,是需要哪些数据,就取哪些数据,取出之后再进行填充.
      

  10.   

    真是惊讶,居然有这么多人认为 datagrid不用再取数据!
    我很想骂你们一句白痴的,呵呵,忍不住啊。
    1翻页回传的时候,你如果不重新取数据绑定到datagrid里,datagrid从哪里取得数据?从dataset取?dataset是内存变量,不是可以保持状态的控件,回传之后不重新定义赋值就没有了!
      

  11.   

    把数据缓存起来.分页的时候去读他.当有insert操作时去更新这个缓存起来的数据..明白?不明白继续问.回答到你明白为止.
      

  12.   

    缓存无非就是cache[] 或者定义静态或者applicationg[],但都是全局变量,多人同时访问就会出毛病。
      

  13.   

    翻页的时候应该是要读数据库的,除非把整个数据源缓存起来,后面分页的时候再从缓存中取
    这样子做相当不好
    以前也我用datagrid分页都是存储分页,每次只返回当前页的数据;后来我觉得datagrid太笨重了,现在都是用table来手写存储分页(封装成控件),自己想怎么写就怎么写,用起来很舒服
      

  14.   

    看你的数据源是什么了,是datareader的话,会重新查询,dataset的话,刚不会重新连数据库
      

  15.   

    看你的数据源是什么了,是datareader的话,会重新查询,dataset的话,刚不会重新连数据库
      

  16.   

    >>真是惊讶,居然有这么多人认为 datagrid不用再取数据!
    >>我很想骂你们一句白痴的,呵呵,忍不住啊。
    >>1翻页回传的时候,你如果不重新取数据绑定到datagrid里,datagrid从哪里取得数据?从dataset取?dataset是内存变量,不是可以保持状态的控件,回传之后不重新定义赋值就没有了!严重同意!
      

  17.   

    当然不行了,你当是做winform程序啊。