如何知道是否选中了复选框

时间:2011-02-17 14:13:13

标签: winforms visual-studio-2008 c#-3.0 datagridviewcheckboxcell

在数据网格视图中,我需要循环遍历行并获取包含已选中复选框的行 dgv.rows [i] .cells [0] .value 在这两种情况下都返回空 所有这一切都发生在事件 CellContentClick

3 个答案:

答案 0 :(得分: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属性引用文本内容。

答案 1 :(得分: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() );
}

答案 2 :(得分: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;
        }
    }
}