如果要对GridView的每一行执行操作,通常会使用RowDataBound。但另外,您也可以使用DataBound并遍历那里的每一行。除了在RowDataBound中保存foreach代码行之外,这两种方法都有任何优点/缺点吗? (表现还是其他?)
答案 0 :(得分:5)
RowDataBound
,因此您不需要DataBound
事件中的额外循环。但是,由于这是微优化,主要区别在于使用foreach
循环行只会为您提供DataControlRowType
DataRow
的行,而RowDataBound
事件会为您提供其他行RowTypes
为
例如,如果你想要页脚:
void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.Footer)
{
// ...
}
}
使用foreach
,您只能获得DataRows
:
foreach(GridViewRow row in gridView1.Rows)
{
// no footer here
}
DataBound
事件的一个优点是您知道在此阶段所有行都已经数据绑定。在RowDataBound
中,您无法访问第一行中第二行的控件/文本。但是,如果您需要这个,最好使用基础DataSource
(例如DataTable
)来获取所需的值(例如聚合列)。
所以DataBound
的主要目的是,如果你想在网格数据绑定之后立即触发一次,而不是每个GridViewRow
。也许根本与GridView
无关。
答案 1 :(得分:2)
我想说使用RowDataBound
具有明显的优势,原因很简单:它在数据绑定期间无论如何都会被执行。在网格数据绑定之后循环,增加了一个不必要的步骤。