如何通过代码更改DataGridViewCheckBoxCell检查状态

时间:2016-11-26 06:38:57

标签: c# .net winforms datagridview datagridviewcheckboxcell

  foreach (DataGridViewRow dgvr in dataGridViewProductList.Rows)
                {
                    string dgvrID = dgvr.Cells["ID"].Value.ToString();
                    DataRow[] s = DT.Select("BillID = " + dgvrID);
                    if (s.Length > 0)
                    {
                        dataGridViewProductList.Columns["chk"].ReadOnly = false;
                        dataGridViewProductList.Rows[dgvr.Index].Cells["chk"].ReadOnly = false;
                         dataGridViewProductList.Rows[dgvr.Index].Cells["chk"].Value = 1;
        }
    }
运行代码DataGridViewCheckBoxCell

未更改为已选中,如何更改其已检查状态

我试过

DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)dataGridViewProductList.Rows[dgvr.Index].Cells["chk"];
                         cell.ReadOnly = false;
                        cell.TrueValue = true;

                        cell.Value = cell.TrueValue;

但不起作用。

1 个答案:

答案 0 :(得分:1)

建议尝试这样做。在设置true / false值之前,请检查cell.Value是否为null。如果是,则将其设置为cell.Value = true; or cell.Value = false; NOT cell.Value = cell.TrueValue/FalseValue;下面的代码应该在按钮单击时切换(选中/取消选中)第3列中的每个复选框。如果复选框为空,我将其设置为true。如果我使用cell.Value = cell.TrueValue;时它的null不起作用。

只是一个想法。

private void button1_Click(object sender, EventArgs e)
{
  foreach (DataGridViewRow row in dataGridView1.Rows)
  {
    DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)row.Cells[2];
    if (cell.Value != null)
    {
      if (cell.Value.Equals(cell.FalseValue))
      {
        cell.Value = cell.TrueValue;
      }
      else
      {
        cell.Value = cell.FalseValue;
      }
    }
    else
    {
      //cell.Value = cell.TrueValue; // <-- Does not work here when cell.Value is null
      cell.Value = true;
    }
  }
}

用于切换复选框值的更紧凑版本 - 删除了检查错误值。

if (cell.Value.Equals(cell.FalseValue))

这个if永远不会被输入,因为未选中的复选框将返回一个null cell.Value,因此这将被前一个if(cell.Value != null)捕获。换句话说......如果它不为空......那就检查了。

private void button1_Click(object sender, EventArgs e)
{
  foreach (DataGridViewRow row in dataGridView1.Rows)
  {
    DataGridViewCheckBoxCell cell = (DataGridViewCheckBoxCell)row.Cells[2];
    if (cell.Value != null)
    {
      cell.Value = cell.FalseValue;
    }
    else
    {
      //cell.Value = cell.TrueValue; // <-- Does not work here when cell.Value is null
      cell.Value = true;
    }
  }
}

希望这有帮助。