如何在DataGridView中的Cell ValueChanged时运行CellEndEdit

PUG*_*PUG 5 .net c# validation datagridview winforms

我只想在更改单元格的值时尝试运行CellEndEdit

if (dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString() == e.FormattedValue.ToString()) 
             return; 
Run Code Online (Sandbox Code Playgroud)

在CellValidation事件中,Cell Validation事件确实返回,但CellEndEdit也会在用户进入编辑模式并且在不更改值单元格的情况下执行并更新updated dateby字段.
当到达时间CellEndEdit CellValue&Formatted Value是相同的,所以不能把这个CellEndEdit.

一个简单的解决方案是在CellValidation中设置一个标志,并在设置标志时返回CellEndEdit,但这似乎是一个容易出错的解决方案,因为表单上有大约10个网格.那10个旗帜?

Ale*_*tic 13

而不是在CellEndEdit中执行您的任务,将它们放在CellValueChanged中.仅在更改单元格值时才会触发它.请注意,它会在最初填充DataGridViews时触发,但为了处理它,您可以只放置一个表示formInitialized或其他的变量,以确保在填充数据网格时不执行CellEndEdit.

并且为了回答你的问题,没有办法弄清楚当CellEndEdit被触发时是否更改了值,因为当单元格退出编辑模式时它总是被触发.唯一的解决方案是,像你提出的那样,在外部存储旧值,但是你已经注意到为什么这么糟糕(尽管在大多数情况下它确实很好).

  • 好的答案,为避免必须维护变量'formInitialized',你可以在'this.InitializeComponent();之后连接'CellValueChanged'事件.在表单/控件构造函数中调用.这样你就不必维护变量了. (2认同)