为什么绑定到GridView后我的DataTable行被清除了?

时间:2014-04-19 00:34:33

标签: c# asp.net gridview datatable

我是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的新手......),但我想了解:

    1. 为什么服务器不保留变量?
    2. 有一种方法可以绕过这种情况,以避免多个服务器数据请求?什么是专业人士和在旁路中弊?

非常感谢!

1 个答案:

答案 0 :(得分:3)

服务器不保留该值,因为每个请求都由页面类的新实例处理。保存数据表的变量与上一个请求中的变量不同。

如果将数据表存储在请求之间的某处,则可以避免数据库调用,但缺点是需要的资源。如果您将数据表置于视图状态,它将花费您的净带宽并影响页面加载时间。如果将它存储在服务器上,它会添加到使用的内存中,跟踪可以从内存中删除的数据并不容易。