问题说明:
在DataGridView中运用一些控件会出现很奇怪的现象,比如在DataGridViewComboColumn或者DataGridViewCheckBoxColumn等这类列中,当用户进行了改变,比如一个DataGridViewComboCell中改变了选项,DataGridViewCheckBoxCell进行过了勾选,并不会立刻生效,而是进入了编辑状态。一个复选框,当你点了勾选结果勾没有出来,只有当你换了一行之类的结束编辑状态的时候才会发生改变,这样用起来有时候就会很烦。。。这类控件正常使用应该是在进行了改变后马上就可以处理而不会进入编辑状态的(举个例子,当一个ComboBox选择一个子项的时候,如果有其它关联的显示,改变了子项应该立刻更新,而不是要等到用户回车之类的动作之后才更新),这样用户体验度会比较好一点。
处理办法:
找到DataGridView的事件中的CurrentCellDirtyStateChanged,当用户进入编辑的时候会立刻触发改事件。可以在改事件中决定是不是要进入编辑或者是提交当前编辑项。
private void DataGridView1_CurrentCellDirtyStateChanged(object sender,EventArgs e) { /* *这里可以加入判断是不是需要立刻提交,如果不用就返回 */ if(DataGridView1.IsCurrentCellDirty) { DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit); } }
当立刻提交数据之后,就会触发CellValueChanged事件,这时候是不会触发CellValidating事件的。