当前位置 : 主页 > 网络编程 > ASP >

asp.net – 最佳实践:DataBound with loop vs RowDataBound

来源:互联网 收集:自由互联 发布时间:2021-06-24
如果要对GridView的每一行执行操作,通常会使用RowDataBound.但另外,您也可以使用DataBound并遍历那里的每一行.除了在RowDataBound中保存foreach代码行之外,这两种方法都有任何优点/缺点吗? (表
如果要对GridView的每一行执行操作,通常会使用RowDataBound.但另外,您也可以使用DataBound并遍历那里的每一行.除了在RowDataBound中保存foreach代码行之外,这两种方法都有任何优点/缺点吗? (表现还是其他?) 无论如何都会为每一行触发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无关的东西.

网友评论