Asp.net 最佳实践:循环数据绑定与行数据绑定

Asp.net 最佳实践:循环数据绑定与行数据绑定,asp.net,gridview,Asp.net,Gridview,如果要对GridView的每一行执行操作,通常会使用RowDataBound。但是,您也可以使用DataBound并循环遍历那里的每一行。除了将foreach行代码保存在RowDataBound中,这两种方法是否都有优点/缺点?(性能还是其他?RowDataBound对每一行都会触发,因此您不需要在DataBound事件中执行额外的循环。但是,由于这是微观优化,主要区别在于使用foreach循环行只会得到DataRow行,而RowDataBound事件也会给您提供其他as 数据行:数据控件的数

如果要对GridView的每一行执行操作,通常会使用RowDataBound。但是,您也可以使用DataBound并循环遍历那里的每一行。除了将foreach行代码保存在RowDataBound中,这两种方法是否都有优点/缺点?(性能还是其他?

RowDataBound
对每一行都会触发,因此您不需要在
DataBound
事件中执行额外的循环。但是,由于这是微观优化,主要区别在于使用
foreach
循环行只会得到
DataRow
行,而
RowDataBound
事件也会给您提供其他as

  • 数据行:数据控件的数据行。只能选择数据行 数据绑定
  • 空数据行:数据绑定控件的空行。这个 当数据绑定控件没有记录时,将显示空行 显示,并且EmptyDataTemplate模板不为空
  • 页脚:数据控件的页脚行。页脚行不能进行数据绑定
  • 标题:数据控件的标题行。标题行不能为空 数据绑定
  • 寻呼机:显示寻呼机按钮或寻呼机控件的行
  • 分隔符
例如,如果您想要页脚:

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
中,无法访问第一行第二行的控件/文本。但是,如果需要,最好使用底层的
数据源
(例如
数据表
)来获取所需的值(例如聚合列)


因此,
DataBound
的主要目的是,如果您想在网格数据绑定后触发某个事件一次,而不是针对每个
GridViewRow
。可能与
GridView
完全无关。

我想说,使用
RowDataBound
有一个明显的优势,原因很简单:在数据绑定期间,它无论如何都会被执行。在网格数据绑定后循环会增加不必要的步骤