2014-09-03 77 views
0

如果我在gridview上有兩個按鈕,並且每個按鈕都執行不同的功能。例如我的代碼下面,在RowCommand中獲取Gridview中的隱藏字段事件

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "Select") 
    { 
     //Do something else 
    } 
    else if (e.CommandName == "View Cert") 
    { 
     int index = Convert.ToInt32(e.CommandArgument); 
     GridViewRow row = GridView1.Rows[index]; 
     errorlab.Text = row.Cells[3].Text; 
    } 

} 

電池3的值是一個隱藏字段並且在數據庫中值的綁定隱藏字段,但我的代碼我無法得到的值。 errorlab標籤沒有顯示任何內容。也許我錯過了一些東西。

+0

您是否嘗試過調試並檢查您爲'row.Cells [3] .Text'返回的值? – sr28 2014-09-03 11:19:32

回答

0

如果您對gridview的細胞futher控制,那麼你必須使用Controls屬性

HiddenField hiddenField =row.Cells[3].Controls[0] as HiddenField; 
if(hiddenField != null) 
    errorlab.Text = hiddenField.Value; 

訪問它們必須使用正確的指數爲對照。調試代碼並檢查控件在row.Cells [3] .Controls中的位置。

0

總是儘量避免通過gridview中的索引位置來引用單元格,因爲如果您在將來在網格中添加/刪除更多列,可能會導致更改代碼,這可能會導致不良結果。還請注意,hiddenfield沒有Text屬性,而是Value屬性來訪問它的值。

如果你知道hiddenfield的名字,那麼最好用它的名字來訪問它。比方說,你有你的hiddenfield定義如下在你的GridView

<ItemTemplate> 
    <asp:HiddenField ID ="hdnField" runat="server" Value='<%# Bind("ErrorLab") %>'/> 
</ItemTemplate> 

然後在你的GridView1_RowCommand你可以做

int index = Convert.ToInt32(e.CommandArgument); 
GridViewRow row = GridView1.Rows[index]; 

HiddenField hdnField = (HiddenField)row.FindControl("hdnField"); 
errorlab.Text = hdnField.Value; 
1

我想提出一個答案,命令參數將不獲取你行指數。相反,它會給你在gridview數據綁定期間綁定的東西。

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     if (e.CommandName == "Select") 
     { 
     //Do something else 
     } 
     else if (e.CommandName == "View Cert") 
     { 
     //The hidden field id is hdnProgramId 
     HiddenField hdnProgramId = (((e.CommandSource as LinkButton).Parent.FindControl("hdnProgramId")) as HiddenField); 
     } 

    } 

這將嘗試從gridview行上下文中找到隱藏的字段。

相關問題