C# 在DataGridView中编辑单元格后,应在哪个事件之后执行操作?

C# 在DataGridView中编辑单元格后,应在哪个事件之后执行操作?,c#,.net,vb.net,winforms,events,C#,.net,Vb.net,Winforms,Events,我在窗体上有一个WinForms DataGridView控件。此DataGridControl中有两个字段: 电子邮件地址 解析的电子邮件地址(根据电子邮件地址中的输入计算) 用户输入或更改电子邮件地址中的值后,我希望解析电子邮件地址中的值根据单独的方法更新。我应该连接到什么事件,以便在更新电子邮件地址单元格后更新已解析电子邮件地址单元格 我不确定将事件放置在何处,因为用户在添加/更改值后可以执行许多操作:在下一个单元格中添加选项卡,在窗体上单击取消,在窗体上单击确定,等等。有什么想法吗?

我在窗体上有一个WinForms DataGridView控件。此DataGridControl中有两个字段:

  • 电子邮件地址
  • 解析的电子邮件地址
    (根据
    电子邮件地址
    中的输入计算)
用户输入或更改
电子邮件地址
中的值后,我希望
解析电子邮件地址
中的值根据单独的方法更新。我应该连接到什么事件,以便在更新
电子邮件地址
单元格后更新
已解析电子邮件地址
单元格


我不确定将事件放置在何处,因为用户在添加/更改值后可以执行许多操作:在下一个单元格中添加选项卡,在窗体上单击取消,在窗体上单击确定,等等。有什么想法吗?

CellValueChanged
编辑完成后激发,例如,当用户离开单元格时。

以下是我所做的:

使用dataGridView的CellBeginEdit和CellEndEdit事件来控制事情。如果您正在编辑电子邮件地址单元格并从中删除选项卡,它将触发CellEndEdit事件

当你点击其中一个按钮时,你应该会得到一个CellEndEdit事件和一个button click事件——在我的测试中,我总是先得到CellEndEdit,但我想是YMMV

如果CellEndEdit发生时存在无效的内容,您可以确保不执行OK/Cancel代码



此外,您可以使用CellValidating事件和e。如果该值无效,则取消该事件。这将阻止按钮单击事件触发,并将您留在编辑的单元格中。

与您尝试执行的操作相关的事件顺序是:

  • 1) 细胞验证

  • 2) CellValueChanged

  • 3) 细胞验证

  • 4) CellEndEdit

如果要阻止基于单元格内容的进一步操作,我建议使用
CellValidating
,因为在
CellValidating
中,可以将
DataGridViewCellValidatingEventArgs
中包含的
e.Cancel
标志设置为true,这将自动将控制权返回到该单元格

如果您只是想更新显示(解析的电子邮件名称),请使用
CellValueChanged

private void myDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e) { e.Cancel = (!validateMyInput(e.FormattedValue.ToString()); } 私有void myDataGridView\u CellValueChanged(对象发送方,DataGridViewCellEventArgs e) { e、 Cancel=(!validateMyInput(例如,FormattedValue.ToString()); }
如果用户单击“确定”或“取消”按钮,如果“单元格值更改”中的某些内容无效,是否有方法停止触发相应的事件事件?@Ben McCormack:请看行后tsmatt的回答。
DGV
是数据绑定的吗?您使用的是
DataTable
还是
List
?@Vivek当表单加载时,它是数据绑定到DataTable的。