首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

GridView1.Rows[0].Cells.Count和GridView1.Columns.Count不相等?解决思路

2012-02-12 
GridView1.Rows[0].Cells.Count和GridView1.Columns.Count不相等?在gridview的RowDataBound事件里引用Grid

GridView1.Rows[0].Cells.Count和GridView1.Columns.Count不相等?
在gridview的RowDataBound事件里引用GridView1.Rows[0].Cells.Count的时候出错:
索引超出范围。必须为非负值并小于集合大小。
参数名: index
而引用Columns.Count则很正常,不知道有没有哪位给个解释,谢谢!

[解决办法]
当数据绑定到GridView的Header的时候,是没有Cells这个集合的,

楼主的代码可改为

C# code
    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]。


热点排行