DataGridViewCheckBox 行返回 null,直到单击复选框

Pau*_*der 2 c# datagridview datagridviewcheckboxcell datagridviewcolumn winforms

我创建了一个带有 DataGridView 的 Windows 窗体,并添加了一列,其中每行包含一个复选框。将 DataTable 绑定到 DataGridView,然后添加 DataGridViewCheckBoxColumn。

当我的表单关闭时,我尝试获取每行中复选框的值,但如果用户在任何时候都没有选中一行中的复选框,那么当我认为应该返回 false 时,程序只会将其值返回为 null (未检查)。这是为什么?我可以做什么来解决它?

//add checkbox column
DataGridViewCheckBoxColumn mCheckboxColumn = new DataGridViewCheckBoxColumn();
mCheckboxColumn.Name = "chk";
mCheckboxColumn.HeaderText = "checkbox";       
dgv.Columns.Add(mCheckboxColumn);



//looping through each row
foreach (DataGridViewRow row in dgv.Rows)
{
     if ((bool)row.Cells["chk"].Value == true)
     {
          MessageBox.Show("checked!");
     }
}
Run Code Online (Sandbox Code Playgroud)

Whe*_*s73 5

我相信您遇到空值的原因是因为您在将新列绑定到数据源后将其添加到数据网格中。因此,在未选中时它没有默认值。

您可以通过以下小改动来解决这个问题。ConvertTo.Boolean 在遇到 null 时将返回 false,而我认为 Boolean.Parse 的转换为 (bool) 则不会。

foreach (DataGridViewRow row in dataGridView1.Rows)
{
    DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)row.Cells["chk"];

    if (Convert.ToBoolean(cell.Value))
    {
        MessageBox.Show("checked!");
    }
}
Run Code Online (Sandbox Code Playgroud)

希望有帮助