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

时间:2010-03-24 14:57:43

标签: c# .net vb.net winforms events

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

  • Email Address
  • Resolved Email Address(根据Email Address中的输入计算)

用户输入或更改Email Address中的值后,我希望Resolved Email Address中的值基于单独的方法更新。我应该绑定什么事件,以便在Resolved Email Address单元格更新后更新Email Address单元格?

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

3 个答案:

答案 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事件。这将使按钮点击事件无法启动,并让您进入已编辑的单元格。