Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在asp.net中,避免在每次页面加载时将数据重新绑定到网格_Asp.net_Grid - Fatal编程技术网

在asp.net中,避免在每次页面加载时将数据重新绑定到网格

在asp.net中,避免在每次页面加载时将数据重新绑定到网格,asp.net,grid,Asp.net,Grid,在asp.net中,建议我存储数据表并将其绑定到网格的最佳方法,以避免在每次页面加载时重新绑定 谢谢网格值将自动存储在ViewState中。除非更改数据,否则不需要在每次回发时重新绑定 如果您有一个数据集,每次都要从中检索不同的视图(如自定义分页或排序),则应使用缓存来存储数据集进行计算。如果viewstate处于启用状态,则无需重新绑定 如果有什么变化,你需要重新绑定,你有几个选择。将数据源存储在viewstate或会话中。这样,您就不必在每次需要添加筛选器或分页等时都访问数据库 例如 如果需

在asp.net中,建议我存储数据表并将其绑定到网格的最佳方法,以避免在每次页面加载时重新绑定


谢谢

网格值将自动存储在ViewState中。除非更改数据,否则不需要在每次回发时重新绑定


如果您有一个数据集,每次都要从中检索不同的视图(如自定义分页或排序),则应使用缓存来存储数据集进行计算。

如果viewstate处于启用状态,则无需重新绑定

如果有什么变化,你需要重新绑定,你有几个选择。将数据源存储在viewstate或会话中。这样,您就不必在每次需要添加筛选器或分页等时都访问数据库

例如

如果需要应用过滤器,只需将数据从存储会话或viewstate中取出,执行操作并再次存储即可。然后只需调用BindYourGrid


这样,除非你需要,否则你永远不会真正达到DB。还有其他方法可以缓存数据源的数据,它们都有优缺点。尽管我只展示了两种方法,但在您的情况下,请使用任何有效的方法。

是的。如果您钩住DataBind事件,您会注意到它不会在启用ViewState的情况下在回发时触发,除非发生使缓存值无效的操作。GridView通常相当聪明地知道什么时候会使缓存副本无效。尤其是与官方数据源(如ObjectDataSource和friends)一起使用时。
// Load up date initially
public void LoadYourData()
{
    // This gets your data however you are doing it, in this example I am returning
    // a list of objects.
    List<YourObjects> yourData = GetYourData();

    // You then have the option to save it in the session or viewstate, I will
    // demonstrate both.  Make sure if you are using viewstate that your objects are
    // serializable.  You should probably also create helper classes to deal with
    // getting and setting data from the ViewState object or Session.
    Session["YourData"] = yourData;
    ViewState["YourData"] = yourData;
}

// Then make a bind function that gets the data out of whatever store you have it in
public void BindYourGrid()
{
    // I will assume you used session
    grdYourGrid.DataSource = (List<YourObjects>)(Session["YourData"]);
    grdYourGrid.DataBind();
}
GetYourData();
BindYourGrid();