我最近刚学C#和ASP.NET,今天编写的最简单datagrid的分页程序.
开始按照书上给的代码写的,完成后发现要点两次下一页才会跳到下一页,后来问其他人改了下,可以了.
可是我觉得很不明白为什么每次分页都要重新加载一次数据?这样的话不是相当于我每次要读取整个表
到内存,然后只取其中的几条数据查看而已,这样的效率太差了吧.是不是大家都不用DATAGrid做分页?
或者还有什么更好的改法?private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string strConn="server=10.0.0.59;uid=test;pwd=test;database=test";
SqlConnection myConnection=new SqlConnection();
myConnection.ConnectionString=strConn;
string strCommand="select * from Ex06_01";
SqlDataAdapter da=new SqlDataAdapter(strCommand,myConnection);
DataSet ds=new DataSet();
da.Fill(ds,"scores");
DataGrid1.DataSource=ds.Tables["scores"].DefaultView;
DataGrid1.DataBind();
}
private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
DataGrid1.CurrentPageIndex=e.NewPageIndex;
}-------------------------
后来问其他人改的
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!IsPostBack)
{
this.BindGrid();
}
}
private void BindGrid(){
string strConn="server=10.0.0.59;uid=test;pwd=test;database=test";
SqlConnection myConnection=new SqlConnection();
myConnection.ConnectionString=strConn;
string strCommand="select * from Ex06_01";
SqlDataAdapter da=new SqlDataAdapter(strCommand,myConnection);
DataSet ds=new DataSet();
da.Fill(ds,"scores");
DataGrid1.DataSource=ds.Tables["scores"].DefaultView;
DataGrid1.DataBind();
}
private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
DataGrid1.CurrentPageIndex=e.NewPageIndex;
this.BindGrid();
}
开始按照书上给的代码写的,完成后发现要点两次下一页才会跳到下一页,后来问其他人改了下,可以了.
可是我觉得很不明白为什么每次分页都要重新加载一次数据?这样的话不是相当于我每次要读取整个表
到内存,然后只取其中的几条数据查看而已,这样的效率太差了吧.是不是大家都不用DATAGrid做分页?
或者还有什么更好的改法?private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string strConn="server=10.0.0.59;uid=test;pwd=test;database=test";
SqlConnection myConnection=new SqlConnection();
myConnection.ConnectionString=strConn;
string strCommand="select * from Ex06_01";
SqlDataAdapter da=new SqlDataAdapter(strCommand,myConnection);
DataSet ds=new DataSet();
da.Fill(ds,"scores");
DataGrid1.DataSource=ds.Tables["scores"].DefaultView;
DataGrid1.DataBind();
}
private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
DataGrid1.CurrentPageIndex=e.NewPageIndex;
}-------------------------
后来问其他人改的
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!IsPostBack)
{
this.BindGrid();
}
}
private void BindGrid(){
string strConn="server=10.0.0.59;uid=test;pwd=test;database=test";
SqlConnection myConnection=new SqlConnection();
myConnection.ConnectionString=strConn;
string strCommand="select * from Ex06_01";
SqlDataAdapter da=new SqlDataAdapter(strCommand,myConnection);
DataSet ds=new DataSet();
da.Fill(ds,"scores");
DataGrid1.DataSource=ds.Tables["scores"].DefaultView;
DataGrid1.DataBind();
}
private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
DataGrid1.CurrentPageIndex=e.NewPageIndex;
this.BindGrid();
}
解决方案 »
- 一个真的很简单的问题
- 进度条跟数据库交互~~~~
- 本地sql2005sql验证登录成功,写在webconfig中登录不成功,很急!
- Excel列合併的問題(大蝦請進來指教)
- 求一个窗口效果,就是你在csdn回复问题时,如果没登录出现的那个登录窗口,周围灰色的那个。
- asp.net2.0+Sql2005超强的Grid(Ext),就是运行有点慢,但功能非常强!!!!
- 一个简单的问题~~
- ASP.NET新手一个很菜的问题望各位指示.
- $ajax加载数据问题
- 用owc生成的excel文档为什么没有文件后缀名
- 请大家发表一下看法:一个Web高级工程师应该具备哪些技能呢?
- 谁能教教小弟很幼稚的问题啊!!!!!!!!!!!!!!!!!!!!!!
你也可以把dataset的内容放到viewstate中,就避免了每次都要读取数据库
分页取数据的解决方法有很多种:
1.像楼主说的,每次变换页,重新查询DB,绑定(但是比较耗费DB连接资源)。
一般有采用分页存储过程来解决矛盾,即:每次只取出想要的分页行,绑定2.将要绑定的数据存储到Session中,数据库资源不耗费了,但增加了服务器的负担。而且容易超时3.保存在客户端,如:ViewState 或者隐含字段中,PostBack再取值。这样会加大网络流量,页面性能不是很好楼主看看用什么方法适合你吧~
ViewState["orgds"]=ds;
取出:
ds=(DataSet)ViewState["orgds"];
还不太懂
为什么服务器端不保留DataSet? 道理很简单,在并发用户很多的情况下,每个人都在服务器占用一大片内存,服务器是吃不消的~楼主的担心是有道理的,这确实有点浪费,假如查询出来的是1000条数据,而每页只显示10条,那么其余的990条数据从数据库读取出来是没有意义的,所以有不少人都喜欢用分页存储过程来解决这个问题,也就是仅仅从数据库读取当前页需要显示的10条数据
{
DataGrid1.CurrentPageIndex=e.NewPageIndex;
this.DataGrid1.SelectedIndex = -1;
BindGrid()
}
这样试试
>>把dataset的内容放到viewstate中
严重避免这种做法!除非dataset的内容非常少。
ViewState的内容是存入在输出的HTML中(<input type="hidden" name="__VIEWSTATE" value="……">),如果ViewState大小有几百KB,甚至上MB,而页面实际要显示的内容才几KB,后果是怎样呢?!
建议改用Cache来缓存,Cache是保存在服务器内存的。
如果记录太多,上千条,就最好使用分页存储过程取出到DataSet。另外参考一下:
ASP.NET ViewState 初探
http://www.microsoft.com/china/msdn/archives/library/dnaspnet/html/Asp11222001.asp