2011-08-31 54 views
1

我有一个GridView,我将它绑定到Page_Load()上。我想隐藏一列,但我想仍然可以访问它。我试过隐藏Gridview列但获取值

 SqlCommand sqlCommand = new SqlCommand("select name,surname,id from test", sqlConnection); 
     sqlConnection.Open(); 
     SqlDataReader reader = sqlCommand.ExecuteReader();   
     GridView1.DataSource = reader;   
     GridView1.DataBind(); 
GridView1.columns[1].visible= False; 

而我得到错误索引超出范围。必须是非负数且小于集合的大小。 有什么建议吗?

+0

你尝试做列的宽度= 0?如果您在设置可见性时收到错误消息,则可能是数据源没有3个字段的问题。请记住,它从索引0开始。 – Asdfg

+0

可能想要显示更多的代码 - 具体来说,在哪里以及如何对数据绑定进行控制。你看到的错误几乎肯定表明GridViewTest.columns中有零个或一个元素,在你尝试访问第二个元素的时候。 – mikemanne

+0

当你需要做的只是访问数据时,你不应该操纵列。这就是数据密钥的用途。 –

回答

2

为此使用数据键。

<asp:GridView ID="GridView1" runat="server" DataKeyNames="ID" ...> 
    <Columns> 
     <asp:BoundField HeaderText="Name" DataField="Name" /> 
     <asp:BoundField HeaderText="Surname" DataField="Surname" /> 
    </Columns> 
</asp:GridView> 

一旦你添加数据的密钥,就可以访问这些值是这样的:

//returns the id at the first row 
int ID = GridView1.DataKeys[0]["ID"] as int; 
+0

嗯,但在你的代码的第二行,我得到以下错误:只有分配,调用,递增,递减和新对象表达式可以用作声明 – pikk

+0

@pikk:见编辑答案。对不起,我忘了将列值赋给变量。 –

+0

是啊,但这如何能帮助我隐藏列,但仍然访问它的价值? – pikk