开发者

Get DataGridView checkbox cell value?

I'm having a strange issue here.

I have a 3 column datagrid that is filled by a connection with the database. So far so good.

I have an extra column, of checkbox type. I need to get it's value for perfoming a bulk operation on it. Here is the catch:

When all cells are selected, it works fine. But when an user selects any cell that its not开发者_如何学Go the first, software gives me a object reference exception.

Here is the code

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

I tracked down the failure to the if-test, throwing a exception, because the value of the cell is read as null.

Any thougths?

Thanks


try this:

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


This didn't work for me (an exception was thrown converting to a Boolean).

I believe that this does the job:

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


Replace row 6 with if (row.Cells[wantedCell].Value == DBNull.Value ? false : (bool)row.Cells[wantedCell].Value == true) to make this:

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


Default value on "unchecked" checkboxcell in datagridview is DBNull. You can change this at its column by setting CheckBoxColumn FalseValue attribute:

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

This will resolve your issue with the cell being read as null.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜