获取DataGridView复选框单元格值?

时间:2010-01-24 20:04:01

标签: c# datagridview

我在这里遇到一个奇怪的问题。

我有一个3列数据网格,它由与数据库的连接填充。到目前为止一切都很好。

我有一个复选框类型的额外列。我需要获得它在其上执行批量操作的价值。这是一个问题:

选择所有单元格后,它可以正常工作。但是当用户选择不是第一个的任何单元格时,软件会给我一个对象引用异常。

这是代码

public List<String> GetSelected()
{
    List<String> selected = new List<String>();
    foreach(DataGridViewRow row in datagrid.rows)
    {
        if ((Boolean)row.Cells[wantedCell].Value == true)
        {
            selected.Add(row.Cells[anotherCell]);
        }
    }
}

我跟踪if-test的失败,抛出异常,因为单元格的值被读为null。

任何一个人?

由于

4 个答案:

答案 0 :(得分:4)

试试这个:

public List<String> GetSelected()
{
    List<String> selected = new List<String>();
    foreach(DataGridViewRow row in datagrid.Rows)
    {
        object value = row.Cells[wantedCell].Value;
        if (value != null && (Boolean)value)
        {
            selected.Add(row.Cells[anotherCell]);
        }
    }
}

答案 1 :(得分:1)

这对我没用(抛出转换为布尔值的异常)。

我相信这可以胜任:

foreach (DataGridViewRow row in dgv.SelectedRows)
{
    bool b = row.Cells[0].Value == DBNull.Value ? false : (bool)row.Cells[0].Value;
    ...
 }

答案 2 :(得分:0)

将第6行替换为if (row.Cells[wantedCell].Value == DBNull.Value ? false : (bool)row.Cells[wantedCell].Value == true)以进行此操作:

public List<String> GetSelected()
{
    List<String> selected = new List<String>();
    foreach(DataGridViewRow row in datagrid.rows)
    {
        if (row.Cells[wantedCell].Value == DBNull.Value ? false : (bool)row.Cells[wantedCell].Value == true)
        {
            selected.Add(row.Cells[anotherCell]);
        }
    }
}

答案 3 :(得分:0)

datagridview中“未选中”复选框单元格的默认值为DBNull。您可以通过设置CheckBoxColumn FalseValue属性在其列上进行更改:

DataGridViewCheckBoxColumn CheckCol = new DataGridViewCheckBoxColumn();
CheckCol.FalseValue = false;

这将解决您将单元格读取为空的问题。