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

时间:2009-09-23 18:20:22

标签: asp.net grid

asp.net中的

建议我存储和绑定数据表到网格的最佳方法,以避免在每个页面加载上重新绑定

感谢

2 个答案:

答案 0 :(得分:0)

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

如果您有一个数据集,您每次都要检索不同的“视图”,例如自定义分页或排序,那么您应该使用缓存来评估存储数据集。

答案 1 :(得分:0)

如果启用了viewstate,则无需重新绑定。

如果某些事情发生变化,你需要重新绑定,你有几个选择。将数据源存储在视图状态或会话中。然后,每次需要添加过滤器或分页等时都不需要访问数据库。

例如

// 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();
}

因此,当您需要在Page_Load中使用它时,您可以使用以下内容:

GetYourData();
BindYourGrid();

如果您需要应用过滤器,您只需将数据从商店(会话或视图状态)中提取出来并执行操作并再次存储。然后拨打BindYourGrid();

这样,除非你需要,否则你永远不会真正击中数据库。还有其他方法可以缓存数据源的数据,它们都有利有弊。尽管我只展示了两种方法,但请选择适合您情况的任何方法。