建议我存储和绑定数据表到网格的最佳方法,以避免在每个页面加载上重新绑定
感谢
答案 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();
。
这样,除非你需要,否则你永远不会真正击中数据库。还有其他方法可以缓存数据源的数据,它们都有利有弊。尽管我只展示了两种方法,但请选择适合您情况的任何方法。