当前位置:编程学习 > C#/ASP.NET >>

GridView列怎么不能隐藏呢,出现奇怪错误!

我有一GridView,是通过一按钮事件,动态绑定数据的,步骤如下:
1、点击按钮,激发事件
2、按钮Click事件调用一方法a,方法a调用存储过程,从数据库中获得数据,然后方法a返回一DataSet,
3、将GridView.DataSource制定为返回的DataSet,然后GridView.Bind()

问题是:GridView数据绑定后,在GridView能够看到返回的所有数据,由于返回的字段较多,我想隐藏一些字段。
我是这样隐藏的:GridView.Columns[0].Visable=false; 进行调试时出现如下错误:“索引超出范围。必须为非负值并小于集合大小。参数名: index,也就是指前面Columns中括号中的0超出了范围”。
我又通过Response.write(GrivView.Columns.count);发现返回值为0
为什么会为0呢,在GridView明明可以看见十几列数据,请教各位高手,这是为何?怎样才能隐藏指定的列? --------------------编程问答-------------------- 在RowDataBound事件中写
e.Row.Cells[0].Visible = false; --------------------编程问答--------------------
引用 1 楼 popcode 的回复:
在RowDataBound事件中写 
e.Row.Cells[0].Visible = false;


为何在RowDataBound事件中进行呢,GridView的数据绑定是如何进行的? --------------------编程问答--------------------
引用 2 楼 iloveyoubaby 的回复:
引用 1 楼 popcode 的回复:
在RowDataBound事件中写 
e.Row.Cells[0].Visible = false; 
 

为何在RowDataBound事件中进行呢,GridView的数据绑定是如何进行的?


GridvView是一行数据一行数据进行绑定,所以每绑定一行,就执行一次RowDataBound,因此,每次读行时,都隐藏
第一个cell,即可 --------------------编程问答-------------------- 如果不是有必要,可以使用綁定列啊,查詢出需要的字段,然後綁到gridview上就有多少列

--------------------编程问答--------------------
引用 4 楼 oec2003 的回复:
如果不是有必要,可以使用綁定列啊,查詢出需要的字段,然後綁到gridview上就有多少列 


在RowDataBound事件中写 
e.Row.Cells[0].Visible = false;  --------------------编程问答-------------------- 个人建议把该事件写在“GridView1_RowCreated”
而且应该是这样写
 
 Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated
        If (e.Row.RowType = DataControlRowType.DataRow Or e.Row.RowType = DataControlRowType.Header) Then
                e.Row.Cells(3).Visible = False
                e.Row.Cells(4).Visible = False
        End If
    End Sub

因为用过在rowdatabound中写不知道为什么有时候还是会出现“超出索引的错误~~~” --------------------编程问答-------------------- 应该要在GridView.Bind()后才能让列隐藏,也就是GridView有列时才能隐藏列,可能是代码位置的问题。 --------------------编程问答-------------------- 你的Response.write(GrivView.Columns.count)是在什么位置?
可以设置断点来看,什么时候输出0,什么时候输出实际列数
可能还没绑定你就输出了,这时候还没创建列,所以为0
可以像3楼那样每行都隐藏某列,7楼的也有道理,可以试试看。 --------------------编程问答--------------------
引用 2 楼 iloveyoubaby 的回复:
引用 1 楼 popcode 的回复:
在RowDataBound事件中写 
e.Row.Cells[0].Visible = false; 
 

为何在RowDataBound事件中进行呢,GridView的数据绑定是如何进行的?
--------------------编程问答-------------------- 在rowcreat事件里面

       if (e.Row.RowType != DataControlRowType.EmptyDataRow && e.Row.RowType != DataControlRowType.Pager)
        {
            e.Row.Cells[1].Visible = false;
        }

补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,