2013-08-22 67 views
2

我在GridView中有一列如下獲取來自GridView控件CheckBoxField字段值上rowcommand事件

<asp:CheckBoxField DataField="IsProcessed" HeaderText="HQ Response"> 
    <ItemStyle Width="100px" /> 
</asp:CheckBoxField> 

在GridView的rowcommand事件我有以下代碼 -

GridViewRow row = (GridViewRow)(((Control)e.CommandSource).NamingContainer); 
int requisitionId = Convert.ToInt32(e.CommandArgument); 
CheckBox cbox = (CheckBox)row.FindControl("IsProcessed"); //does not work 

但CBox是一款返回null。我在這裏做什麼錯了?

回答

4
GridViewRow row = (GridViewRow)(((Control)e.CommandSource).NamingContainer); 
    int requisitionId = Convert.ToInt32(e.CommandArgument); 
    CheckBox cbox = (CheckBox)row.Cells[3].Controls[0]; 
+0

如果單元格中有多個控件,該怎麼辦?如何知道正確的控制指數? – Somebody

0

試試這個

GridDataItem item = (GridDataItem)e.Item; 
CheckBox cbox =(CheckBox)item.FindControl("IsProcessed"); 
+0

無法找到類型或名稱空間名稱'GridDataItem'...... –

0

這裏有一些方法來對s.k.paul的答案擴大。

一種方法獲取列值,另一種獲取複選框的布爾值。另一種方法根據標題找到列。

public static bool gvGetCBVal(GridView gvGrid, string sHeaderText) 
{ 
    GridViewRow row = gvGrid.SelectedRow; 
    int iCol = gvGetColumn(gvGrid, sHeaderText); 
    CheckBox ckBox = (CheckBox)row.Cells[iCol].Controls[0]; 
    return ckBox.Checked; 
} 

public static string gvGetVal(GridView gvGrid, string sHeaderText) 
{ 
    GridViewRow row = gvGrid.SelectedRow; 
    int iCol = gvGetColumn(gvGrid, sHeaderText); 
    return row.Cells[iCol].Text; 
} 

private static int gvGetColumn(GridView gvGrid, string sHeaderText) 
{ 
    int iRetVal = -1; 
    for (int i = 0; i < gvGrid.Columns.Count; i++) 
    { 
     if (gvGrid.Columns[i].HeaderText.ToLower().Trim() == sHeaderText.ToLower().Trim()) 
     { 
      iRetVal = i; 
     } 
    } 
    return iRetVal; 
} 
相關問題