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

本文关键字:GridView 清除 绑定 我的 DataTable 为什么 | 更新日期: 2023-09-27 17:59:08

我是ASP的新手。Net,我对DataBind:的工作原理有疑问

  • Page_Load:如果IsPostBack为false,则加载DataTable var(在Page_Loads外部声明)并将其绑定到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. 有没有办法绕过这种情况,以避免多个服务器数据请求?什么是优点&旁路里的犯人

非常感谢!

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

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

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