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; --------------------编程问答--------------------
为何在RowDataBound事件中进行呢,GridView的数据绑定是如何进行的? --------------------编程问答--------------------
GridvView是一行数据一行数据进行绑定,所以每绑定一行,就执行一次RowDataBound,因此,每次读行时,都隐藏
第一个cell,即可 --------------------编程问答-------------------- 如果不是有必要,可以使用綁定列啊,查詢出需要的字段,然後綁到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楼的也有道理,可以试试看。 --------------------编程问答-------------------- --------------------编程问答-------------------- 在rowcreat事件里面
if (e.Row.RowType != DataControlRowType.EmptyDataRow && e.Row.RowType != DataControlRowType.Pager)
{
e.Row.Cells[1].Visible = false;
}
补充:.NET技术 , ASP.NET