我有一个WinForms应用程序,并且在表单中使用了datagridview。 DataGridView有许多复选框列,并且可以通过代码选择和处理单元格。
因此可以检查/取消选中所有单元格或从剪贴板复制到/插入。除最后一个选中的复选框外,此方法工作正常。只要选择了该单元格,就不会显示第一个值。
我尝试设置SuspendLayout
,Refresh
,Update
,然后设置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();
}
我希望在单击菜单项后可以直观地设置/取消设置所有单元格,但是在取消选择单元格之后可以直观地设置最后一个单元格。
答案 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
显然具有正确的索引。也许它可以进一步说明问题。