我只想在单元格值更改时运行cellendedit,尝试将

if (dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString() == e.FormattedValue.ToString())
             return;

在CellValidation事件中,当用户只进入编辑模式并且在不更改值单元格的情况下输出时,CellValidation事件确实返回,但CellEndedit也会执行并更新updated date&by字段。
当cellendedit到达时,CellValue&Formatted Value是相同的,因此无法将其放入cellendedit。
一个简单的解决方案是在cellvalization中设置一个标志,并在设置标志时返回cellendedit,但这似乎是一个容易出错的解决方案,因为表单上大约有10个gird。那么10个旗子?

最佳答案

与其在cellendedit中执行任务,不如将它们放在cellvaluechanged中。只有当单元格值更改时才会触发。请注意,当最初填充datagridviews时,它会触发,但是为了处理这个问题,您可以只放置一个表示forminitialized的变量或其他内容,以确保在填充数据网格时不执行cellendedit。
要回答您的问题,没有办法确定在cellendedit被触发时是否更改了值,因为当cell退出编辑模式时,它总是被触发。唯一的解决方案是,像您所建议的那样,将旧的值存储在外部,但是您已经注意到了为什么会那么糟糕(尽管它在大多数情况下都非常有效)。

08-16 17:56