我在用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保存在内存之意?
{
连接数库语句和填充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保存在内存之意?
这样来说,读取数据库表时把所有记录都填充在DataSet里是个错误了,因为根本用不到除了要显示的数据之外的记录.
当然不能这样说,有可能对于你的应用来说不需要将所有记录都读出来,对于别人的应用却一定要全部读出呢(比如需要做统计分析,算法有很复杂,用sql语句实现复杂)。
如果你不需要全部读出,可以用sql语句来限制读出的记录条数。
2.放在内存里可以复用,比如把数据绑定到了个控件里。DataSet里面可以有多个DataTable(记录集),这样的话就可以缩短链接数据库的开销,
和绑定多个控件(一个记录集对应一个控件)。
有个页面,第一次打开时,第一次填充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()???
{ if(!Page.IsPostBack)
{
//界面在第一次加载时执行
//将你的绑定代码写在这里
}
}
最好是把绑定DataGrid的语句写成一个函数,在这个函数里面做这些工作。不要分散在各处。