我在用DataGrid时private void Bind()
{
连接数库语句和填充ds......
DataGrid.DataSource = ds;
DataGrid.DataBind();
}在分页中
private void DataGrid_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e){
DataGrid.CurrentPageIndex = e.NuwPageIndex;
Bind();
}
大概这样了
疑惑在这里了:
DataSet是保存在内存中的,为什么分页还得执行"连接数库和填充ds 语句"?
无论如何显示DataGrid哪页,都得重新把数据库表里的记有记录读取出来保存在DataSet里,这样,何来DataSet保存在内存之意?

解决方案 »

  1.   

    页面刷新的时候,就不在内存中了,可以使用ViewState保存DataSet或者,使用SQL中的Limit子句进行分页
      

  2.   

    DataSet是存放在了内存里,但是它有生命周期呀。不幸的是,他的生命很短,页面访问完了,他也就没了。翻页的时候他是一定会消失的,除非你把它放在session里面。
      

  3.   

    在整个页面的生存期,DataSet是保存在内存中的,但是页面执行完了之后DataSet就不在内存中了,希望你能看明白。
      

  4.   

    这样来说,读取数据库表时把所有记录都填充在DataSet里是个错误了,因为根本用不到除了要显示的数据之外的记录.
      

  5.   

    lincai(在属于自己的空间奔忙) ( ) 信誉:100  2005-07-13 14:20:00  得分: 0  
     
     
       这样来说,读取数据库表时把所有记录都填充在DataSet里是个错误了,因为根本用不到除了要显示的数据之外的记录.
      
     
    当然不能这样说,有可能对于你的应用来说不需要将所有记录都读出来,对于别人的应用却一定要全部读出呢(比如需要做统计分析,算法有很复杂,用sql语句实现复杂)。
    如果你不需要全部读出,可以用sql语句来限制读出的记录条数。
      

  6.   

    DataSet 的好处有两点:1.缩短open的时间。
    2.放在内存里可以复用,比如把数据绑定到了个控件里。DataSet里面可以有多个DataTable(记录集),这样的话就可以缩短链接数据库的开销,
    和绑定多个控件(一个记录集对应一个控件)。
      

  7.   

    我之所以有这种迷惑主要是这样的:
    有个页面,第一次打开时,第一次填充ds有30条记录,那么绑定到DataGrid中(在Bind(){dg.DataSource=ds;dg.DataBind();}中绑定),分成三页,我查看了第三页的内容,这时,DataGrid的CurrentPageIndex=3了,接着我点击另外一个按钮,重新填充ds(在SaveBind()中),这时只有8条记录,再绑定到DataGrid了(在SaveBind(){dg.DataSource=ds;dg.DataBind();}}中),,却出错了,因为刚才的DataGrid.CurrentPageIndex=3,而现在的DataGrid的PageCount才1,所以才会出错。
    还有在分页事件也出现问题,不知该怎样写了,写Bind()还是SaveBind()???
      

  8.   

    是你的分页方法不正确,要判断当前的pageindex和pagecount的关系,保证不要溢出就没有你说的问题了.
      

  9.   

    加上这个试试 private void Page_Load(object sender, System.EventArgs e)
    { if(!Page.IsPostBack)  
    {
                                    //界面在第一次加载时执行
                                    //将你的绑定代码写在这里
    }
    }
      

  10.   

    ......这时,DataGrid的CurrentPageIndex=3了,接着我点击另外一个按钮,重新填充ds(在SaveBind()中),这时只有8条记录......这时没有第三页嘛,没有数据显示,所以出错了呀。
      

  11.   

    所以我在按钮事件加入了DataGrid.CurrentPageIndex = 0; 不知这种方法是否可取?
      

  12.   

    回楼上:
    最好是把绑定DataGrid的语句写成一个函数,在这个函数里面做这些工作。不要分散在各处。