在代码中分配值后,datagridview如何直接使用?

时间:2019-08-12 09:26:40

标签: c# winforms datagridview datagridviewcheckboxcell

我有一个WinForms应用程序,并且在表单中使用了datagridview。 DataGridView有许多复选框列,并且可以通过代码选择和处理单元格。

因此可以检查/取消选中所有单元格或从剪贴板复制到/插入。除最后一个选中的复选框外,此方法工作正常。只要选择了该单元格,就不会显示第一个值。

我尝试设置SuspendLayoutRefreshUpdate,然后设置ResumeLayout。但是其中任何一个都不适合我。

private void SetCheckBoxCells(bool value)
{
  myDataGridView.SuspendLayout();

  foreach (var cell in myDataGridView.SelectedCells)
  {
    (cell as DataGridViewCheckBoxCell).Value = value;
  }

  myDataGridView.Refresh();
  myDataGridView.Update();         
  myDataGridView.ResumeLayout();
}

我希望在单击菜单项后可以直观地设置/取消设置所有单元格,但是在取消选择单元格之后可以直观地设置最后一个单元格。

1 个答案:

答案 0 :(得分:1)

该问题几乎可以肯定不是由Refresh / Update引起的。如果存在问题,则在其他单元格中进行首次手动编辑后,您会看到正确的值。您还可以检查值,即:

MSgbox(myDataGridView.Rows[1].Cells[0].Value.ToString);

很显然,索引正确。我相信您会得到所见即所得。

foreach中的

SelectedCells应该非常健壮并且不会出现索引错误,因此我将仔细检查是CellEdit状态还是CurrentCell焦点还是某些事件不会干扰第一个单元格,从而阻止对其进行更新。

也许尝试将当前单元格设置为选定范围之外的内容:

myDataGridView.CurrentCell = myDataGridView.Rows[1].Cells[0];
    // some other cell not included in selection

那里的整数(x1到y2)在做什么?他们没有工作。刚刚离开测试?尝试直接解决麻烦的单元(仅用于调试),就像这样:

myDataGridView.Rows[1].Cells[0].value = True

显然具有正确的索引。也许它可以进一步说明问题。