【问题标题】:Get DataGridView checkbox cell value?获取 DataGridView 复选框单元格值?
【发布时间】:2010-01-24 20:04:01
【问题描述】:

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

我有一个由与数据库的连接填充的 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。

有什么想法吗?

谢谢

【问题讨论】:

  • 哪一行抛出异常?
  • 只是索引的一个例子。不是真正的单元格名称或索引。有趣的是,我已经解决了这个问题。而不是像这样转换值: (Boolean)row.Cells[i].Value 我使用 Convert.ToBoolean(row.Cells[i]) 并且工作正常。谢谢你的帮助! :D
  • 您的问题可能是 row.Cells[wantedCell].Valuenull,您试图将其转换为 bool。 (不可为空的类型)
  • @SLaks 关闭。该值为 DbNull.Value

标签: c# datagridview


【解决方案1】:

试试这个:

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

【讨论】:

    【解决方案2】:

    这对我不起作用(转换为布尔值时抛出异常)。

    我相信这样做可以:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-06-06
          • 2015-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多