zoukankan      html  css  js  c++  java
  • gridview的事件RowDataBound对第一行不起作用

    网上查找资料,有的人碰到这种情况是因为,这个事件是每行执行一次,标题行影响了这个事件,可将代码放入Header下,代码将对第一行起作用了,但是我试过了还是不起作用,后来又找到一个原因,是因为使用数据行判断的时候,就不需要再次遍历每行数据了。两者不能同时存在。现两种情况总结如下:

    第一种:

    可将代码放入Header下,代码将对第一行起作用了

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

    {

      if (e.Row.RowType == DataControlRowType.Header)

      { //do nothing }

      if (e.Row.RowType == DataControlRowType.DataRow)

      { Response.Write(GridView1.Rows[0].Cells.Count.ToString()); }

    }

    第一次RowDataBound被执行的时候,是Header被创建后加进GridView的时候。也就是if(e.Row.RowType==DataControlRowType.Header){ //这里被执行;} 这时候GridView1.Rows[0]你根本访问不到,因为GridView.Rows的时候是不考虑Header的。
    第二次RowDataBound被执行的时候,第一行的GridViewRow已经被创建,数据也被绑进GridViewRow里了。但真到 RowDataBound执行结束,你都不可能访问到GridView1.Rows[0],因为GridViewRow还没添加进GridView的集合当中。
    当第三次DataRowBound执行的时候,这是候才有一个真正包含数据的GridViewRow已经被添加进GridView.Rows集合。这时才能访问到GridView.Rows[0]。

    if (e.Row.RowType == DataControlRowType.DataRow) {   Response.Write(GridView1.Rows[0].Cells.Count.ToString()); } if段里的代码第一次执行时肯定也是访问不到GridView.Rows[0]的,因为根本没有。

    第二种:

    在事件中还习惯的添加了“多余代码”,foreach (GridViewRow rv in GvProduct.Rows)就是这句话造成。原因很简单。RowDataBound事件的作用就是在控件加载时遍历每行数据。又加了这个遍历,破坏了程序的运行结果。总结:使用数据行判断的时候,就不需要再次遍历每行数据了。两者不能同时存在。

  • 相关阅读:
    002变量
    001Java输入、eclipse快捷键
    040同步条件event
    kali配置ip,更新源,更新签名
    039条件变量同步(Condition)
    038信号量
    037多线程同步
    配置java环境变量(详细)
    提高你的Python能力:理解单元测试
    电影里的代码之《机械姬》:筛法求质数
  • 原文地址:https://www.cnblogs.com/ljan/p/2847561.html
Copyright © 2011-2022 走看看