我在这里遇到一个奇怪的问题。
我有一个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。
任何一个人?
由于
答案 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;
这将解决您将单元格读取为空的问题。