最佳实践:DataBound with loop vs RowDataBound

TTT*_*TTT 3 asp.net gridview

如果要对GridView的每一行执行操作,通常会使用RowDataBound.但另外,您也可以使用DataBound并遍历那里的每一行.除了在RowDataBound中保存foreach代码行之外,这两种方法都有任何优点/缺点吗?(表现还是其他?)

Tim*_*ter 5

RowDataBound无论如何都会触发每一行,因此您不需要在DataBound 事件中添加额外的循环.然而,因为这是微优化的主要区别是,随着循环的行foreach会给你只是行,而事件使您还有其他如DataControlRowType DataRowRowDataBoundRowTypes

  • DataRow:数据控件的数据行.只有DataRow行可以是数据绑定的.
  • EmptyDataRow:数据绑定控件的空行.当数据绑定控件没有要显示的记录且EmptyDataTemplate模板不为null时,将显示空行.
  • 页脚:数据控件的页脚行.页脚行不能是数据绑定的.
  • 标题:数据控件的标题行.标题行不能是数据绑定的.
  • 寻呼机:显示寻呼机按钮或寻呼机控件的行.
  • 分隔器

例如,如果你想要页脚:

void CustomersGridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{  
    if(e.Row.RowType == DataControlRowType.Footer)
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

随着foreach你得到的只有DataRows:

foreach(GridViewRow row in gridView1.Rows)
{
    // no footer here
}
Run Code Online (Sandbox Code Playgroud)

DataBound事件的一个优点 是您知道在此阶段所有行都已经数据绑定.在RowDataBound 您无法访问第一行中第二行的控件/文本.但是,如果您需要这个,最好使用底层DataSource(例如a DataTable)来获取所需的值(fe来聚合列).

因此,主要目的DataBound 是如果你想在网格数据绑定之后立即触发一次,而不是每次触发GridViewRow.也许与完全没有关系的东西GridView.