【问题标题】:Is there an elegant/simple way to do a Databind on all grids on a page?是否有一种优雅/简单的方法可以在页面上的所有网格上进行数据绑定?
【发布时间】:2015-06-12 09:02:36
【问题描述】:
是否有一种优雅/简单的方法可以对页面上的所有网格视图进行数据绑定?
我继承了一些旧的 webform 代码,该代码在一个页面上最多显示 17 个网格视图。我需要根据新的日期范围刷新这些视图。
我打算在 page_load 事件中对 gridviews 执行 DataBind。这适用于第一个网格,但我不想在页面加载事件中再做 16 次相同的事情,所以想知道有没有办法遍历页面上的所有网格视图?
所有的网格视图都被动态添加到表单中。
【问题讨论】:
标签:
asp.net
gridview
data-binding
【解决方案1】:
绝对是的。
所有设置了 DataSourceID 属性的 VISIBILE 数据绑定控件将在每次回发和刷新时自动进行数据绑定。
Visibile 是指任何具有Visibile=True 的数据绑定控件或数据绑定控件的父级(层次结构中的任何位置)都将是数据绑定的。
无论是动态的还是其他的,控件都会添加到控件层次结构中,并且它们都遵循相同的规则。
当您构建一个 aspx 页面时,您所要做的就是为 ASP 提供一组预定义的控件和关系,它会在每次刷新和回发时动态构建这些控件和关系。
通过用户干预动态添加的控件也遵循相同的规则,只是需要进行更多手动“接线”,但生命周期规则仍然适用。
【解决方案2】:
你可以像这样遍历所有的gridview控件:-
foreach (Control control in Page.Controls)
{
foreach (GridView grdView in control.Controls.OfType<GridView>())
{
grdView.DataSource = data;
grdView.DataBind();
}
}