0

在數據網格視圖中,我需要在行上循環並獲取包含選中複選框的行 dgv.rows [i] .cells [0] .value is在這兩種情況下 這一切都是在事件發生CellContentClick返回空如何知道是否勾選複選框

+0

後,我嘗試了很多的事情,我發現這個問題是因爲當我使用事件另一個事件的價值是真實的。任何關於另一個事件的想法,當我更改複選框的檢查時會觸發? – Mario 2011-02-21 09:41:48

+0

你需要發佈一些代碼。我們都根據您提供的信息提供了有效的答案。沒有相關的代碼,我們無法做其他事情。 – 2011-02-21 15:07:32

回答

0

嘗試:

'VB 
Dim MyCheckBox As CheckBox = _ 
    CType(dgv.rows[i].cells[0].findcontrol("checkbox_id"), CheckBox) 

C#:

//C# 
CheckBox MyCheckBox = 
    dgv.Rows[i].Cells[0].FindControl("checkbox_id") as CheckBox; 

單元格的Value屬性指單元格不包含任何其他控件時的文本內容。

+0

這個問題是在C#代碼和你的答案是爲VB 的信息,你不必使用可以使用的findControl((複選框)dgv.rows [ind] .cells [0] .children [0]) – Mario 2011-02-17 14:54:50

0

如果該複選框不包含任何數據,則結果將爲空值。您可以與bool.Parse()假設值的循環解析值不爲空,即

for (int i = 0; i < dgv.Rows.Count; i++) 
{ 
    var val = dgv.Rows[i].Cells[0].Value; 
    if (val == null) { continue; } 

    bool isChecked = bool.Parse(val.ToString()); 
} 
0
static class DataGridViewExtensions 
{ 
    public static IEnumerable<DataGridViewRow> CheckedRows(this DataGridView dgv, string checkedColumnName) 
    { 
     return CheckedRows(dgv, dgv.Columns[checkedColumnName].Index); 
    } 

    public static IEnumerable<DataGridViewRow> CheckedRows(this DataGridView dgv, int checkedColumnIndex) 
    { 
     foreach (DataGridViewRow row in dgv.Rows) 
     { 
      DataGridViewCheckBoxCell cell = row.Cells[checkedColumnIndex] as DataGridViewCheckBoxCell; 
      Debug.Assert(cell != null, "The column specified is not a check box column"); 
      if (cell != null && (bool)cell.Value) 
       yield return row; 
     } 
    } 
}