我在表单上有一个WinForms DataGridView控件。此DataGridControl中有两个字段:
Email Address
Resolved Email Address
(根据Email Address
中的输入计算)用户输入或更改Email Address
中的值后,我希望Resolved Email Address
中的值基于单独的方法更新。我应该绑定什么事件,以便在Resolved Email Address
单元格更新后更新Email Address
单元格?
我不确定将事件放在何处,因为用户可以在添加/更改值后执行多项操作:选项卡到下一个单元格,单击表单上的取消,单击表单上的确定等。想法?
答案 0 :(得分:2)
与您要执行的操作相关的事件的顺序是:
1)CellValidating
2)CellValueChanged
3)CellValidated
4)CellEndEdit
如果您想根据单元格的内容阻止进一步操作,我建议您使用CellValidating
,因为在CellValidating
中,您可以设置e.Cancel
中包含的DataGridViewCellValidatingEventArgs
标志1}}为true,它会自动将控制权返回给该单元格。
如果您只是想更新显示(已解析的电子邮件名称),请使用CellValueChanged
。
private void myDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e) { e.Cancel = (!validateMyInput(e.FormattedValue.ToString()); }
答案 1 :(得分:1)
CellValueChanged
会触发,例如当用户离开单元格时。
答案 2 :(得分:1)
这就是我所做的:
使用dataGridView的CellBeginEdit和CellEndEdit事件来控制事物。如果您正在编辑电子邮件地址单元格和选项卡,它将触发CellEndEdit事件。
当你点击其中一个按钮时,你应该得到一个CellEndEdit事件和一个按钮点击事件 - 在我的测试中,我总是先得到CellEndEdit,但我想是YMMV。
如果CellEndEdit发生时出现无效,您可以确定不执行OK / Cancel代码。
此外,如果值无效,您可以使用CellValidating事件并e.Cancel事件。这将使按钮点击事件无法启动,并让您进入已编辑的单元格。