3

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

4

2 回答 2

5

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

  • 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 回答