加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 09:25:20 所属栏目:asp.Net 来源:网络整理
导读:如果要对GridView的每一行执行操作,通常会使用RowDataBound.但另外,您也可以使用DataBound并遍历那里的每一行.除了在RowDataBound中保存foreach代码行之外,这两种方法都有任何优点/缺点吗? (表现还是其他?) 解决方法 无论如何都会为每一行触发RowDataBound
如果要对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无关的东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读