我是ASP.Net的新手,我怀疑DataBind的工作原理:
Page_Load:如果IsPostBack = false,我加载我的DataTable var(在Page_Load之外声明)并将其绑定到GridView。我的想法是保留DataTable,避免对数据库的新查询。
当我点击其他页面时,会引发PageIndexChanging,执行此操作:
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataSource = _table;
GridView1.DataBind();
}
由于网格显示为空,因此效果不佳。我在其他示例中发现数据源已完全重新加载,因此我将加载代码放在函数中,并更改了我的PageIndexChanging事件:
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
LoadData();
GridView1.DataSource = _table;
GridView1.DataBind();
}
不是它像魅力一样!我知道我的DataTable在Page_Load和PageIndexChanging事件之间被清除,可能是因为服务器没有保留数据表var(请记住我在ASP.NET的新手......),但我想了解:
非常感谢!
答案 0 :(得分:3)
服务器不保留该值,因为每个请求都由页面类的新实例处理。保存数据表的变量与上一个请求中的变量不同。
如果将数据表存储在请求之间的某处,则可以避免数据库调用,但缺点是需要的资源。如果您将数据表置于视图状态,它将花费您的净带宽并影响页面加载时间。如果将它存储在服务器上,它会添加到使用的内存中,跟踪可以从内存中删除的数据并不容易。