如果要对 GridView 的每一行执行操作,通常会使用 RowDataBound。但或者,您也可以使用 DataBound 并循环遍历那里的每一行。除了在 RowDataBound 中保存 foreach 代码行之外,这两种方法有什么优点/缺点吗?(性能还是其他?)
问问题
2859 次
2 回答
5
RowDataBound
无论如何都会为每一行触发,因此您不需要在DataBound
事件中添加额外的循环。然而,由于这是微优化,主要区别在于循环行foreach
只会给你行,而事件也会给你其他DataControlRowType
DataRow
RowDataBound
RowTypes
- DataRow:数据控件的数据行。只有 DataRow 行可以是数据绑定的。
- EmptyDataRow:数据绑定控件的空行。当数据绑定控件没有要显示的记录且 EmptyDataTemplate 模板不为空时,将显示空行。
- 页脚:数据控件的页脚行。页脚行不能是数据绑定的。
- 标题:数据控件的标题行。标题行不能是数据绑定的。
- 寻呼机:显示寻呼机按钮或寻呼机控件的行。
- 分隔器
例如,如果你想要页脚:
void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.Footer)
{
// ...
}
}
有了 aforeach
你只得到DataRows
:
foreach(GridViewRow row in gridView1.Rows)
{
// no footer here
}
该事件的一个优点 DataBound
是您知道在此阶段所有行都已被数据绑定。在RowDataBound
您无法访问第一行中第二行的控件/文本。但是,如果您需要这个,最好使用底层DataSource
(例如 a DataTable
)来获取所需的值(fe 来聚合列)。
所以 的主要目的DataBound
是如果你想在网格数据绑定后立即触发一次,而不是每个GridViewRow
. 也许与根本无关的东西GridView
。
于 2013-09-16T21:09:00.637 回答
2
我会说 usingRowDataBound
有一个明显的优势,原因很简单:它无论如何都会在数据绑定期间执行。在网格被数据绑定后循环遍历增加了一个不必要的步骤。
于 2013-09-16T21:12:33.853 回答