【问题标题】:Why my DataTable rows are cleared after a bind to a GridView?为什么我的 DataTable 行在绑定到 GridView 后会被清除?
【发布时间】:2014-06-03 13:40:22
【问题描述】:

我是 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. 有没有办法绕过这种情况以避免多个服务器数据请求?旁路的优缺点是什么?

非常感谢!

【问题讨论】:

    标签: c# asp.net gridview datatable


    【解决方案1】:

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

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

    【讨论】:

    • Guffa 是正确的。您基本上必须在每次页面加载时绑定数据或将数据放入会话变量或 Web 缓存中。除非您有一个非常繁忙的网站,否则在每个请求上绑定您的数据并不是什么大问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    相关资源
    最近更新 更多