2011-08-31 53 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