最佳实践:DataBound with loop vs RowDataBound

时间:2013-09-16 21:03:14

标签: asp.net gridview

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

2 个答案:

答案 0 :(得分:5)

无论如何都会为每一行触发

RowDataBound,因此您不需要DataBound事件中的额外循环。但是,由于这是微优化,主要区别在于使用foreach循环行只会为您提供DataControlRowType DataRow的行,而RowDataBound事件会为您提供其他行RowTypes

  • DataRow :数据控件的数据行。只有DataRow行才可以 数据绑定。
  • EmptyDataRow :数据绑定控件的空行。该 当数据绑定控件没有记录时,将显示空行 display和EmptyDataTemplate模板不为null。
  • 页脚:数据控件的页脚行。页脚行不能与数据绑定。
  • 标题:数据控件的标题行。标题行不能 数据绑定。
  • 寻呼机:显示寻呼机按钮或寻呼机控件的行。
  • 分隔符

例如,如果你想要页脚:

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具有明显的优势,原因很简单:它在数据绑定期间无论如何都会被执行。在网格数据绑定之后循环,增加了一个不必要的步骤。