获取DataGridView复选框单元格的值?

8
我在这里遇到了一个奇怪的问题。
我有一个由与数据库连接填充的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]);
        }
    }
}

我追踪到了失败的原因,是因为读取单元格的值为 null,在 if 测试中抛出了异常。
有什么想法吗?
谢谢。

哪一行抛出了异常? - SLaks
4
这只是索引的一个例子,不是真实的单元格名称或索引。有趣的是,我已经解决了这个问题。我使用以下方法而不是转换值:Convert.ToBoolean(row.Cells[i])它工作得很好。感谢您的帮助! :D - George Silva
4
你遇到的问题可能是 row.Cells[wantedCell].Valuenull,而你试图将其转换为 bool 类型。(这是一个不可为空的类型) - SLaks
@SLaks 关闭。该值为DbNull.Value。 - WonderWorker
4个回答

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
这对我没有用(转换为布尔值时抛出了异常)。
我认为这样做可以解决问题:
foreach (DataGridViewRow row in dgv.SelectedRows)
{
    bool b = row.Cells[0].Value == DBNull.Value ? false : (bool)row.Cells[0].Value;
    ...
 }

0

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

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

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


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]);
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接