验证绑定,取决于单击哪个按钮
Validating binding, depending on which button is clicked
我搜索了很多,但没有找到正确的解决方案。
我有一个 TextBox
、DataGridView
、3 个 Button
和一个 BindingSource
。
当我点击 Button
'Change' 时,我设置了绑定,数据从 DataGridView
加载到 TextBox
,这有效:
textBox.DataBindings.Add("text", bindingSource, "Name", true, DataSourceUpdateMode.OnPropertyChanged);
当我现在点击 Button
'Cancel' 绑定将被清除:
textBox.DataBindings.Clear();
但数据仍然传输到DataGridView
。我认为这是因为 OnPropertyChanged
。当我将其更改为 OnValidation
时,我知道它只会在经过验证后才会被保存。
但是我该如何验证或拒绝验证呢?我有2个Button
,根据点击的是'Save'按钮还是'Cancel'按钮,应该转成DataGridView
还是不转
还有活动
textBox.Validating += textBox_Validating;
我没明白运行,因为这个函数是在我点击按钮之前调用的。
我怎样才能做到这一点?
您可以使用 DataSourceUpdateMode.Never
创建绑定并将其存储在表单级变量(字段)中。然后您可以使用 WriteValue
method to apply the changes (respectively ReadValue
恢复更改)。
像这样:
形式:
Binding nameBinding;
更改按钮点击:
nameBinding = textBox.DataBindings.Add("Text", bindingSource, "Name", true, DataSourceUpdateMode.Never);
点击取消按钮:
nameBinding.ReadValue();
textBox.DataBindings.Clear();
nameBinding = null;
点击保存按钮:
nameBinding.WriteValue();
textBox.DataBindings.Clear();
nameBinding = null;
我搜索了很多,但没有找到正确的解决方案。
我有一个 TextBox
、DataGridView
、3 个 Button
和一个 BindingSource
。
当我点击 Button
'Change' 时,我设置了绑定,数据从 DataGridView
加载到 TextBox
,这有效:
textBox.DataBindings.Add("text", bindingSource, "Name", true, DataSourceUpdateMode.OnPropertyChanged);
当我现在点击 Button
'Cancel' 绑定将被清除:
textBox.DataBindings.Clear();
但数据仍然传输到DataGridView
。我认为这是因为 OnPropertyChanged
。当我将其更改为 OnValidation
时,我知道它只会在经过验证后才会被保存。
但是我该如何验证或拒绝验证呢?我有2个Button
,根据点击的是'Save'按钮还是'Cancel'按钮,应该转成DataGridView
还是不转
还有活动
textBox.Validating += textBox_Validating;
我没明白运行,因为这个函数是在我点击按钮之前调用的。
我怎样才能做到这一点?
您可以使用 DataSourceUpdateMode.Never
创建绑定并将其存储在表单级变量(字段)中。然后您可以使用 WriteValue
method to apply the changes (respectively ReadValue
恢复更改)。
像这样:
形式:
Binding nameBinding;
更改按钮点击:
nameBinding = textBox.DataBindings.Add("Text", bindingSource, "Name", true, DataSourceUpdateMode.Never);
点击取消按钮:
nameBinding.ReadValue();
textBox.DataBindings.Clear();
nameBinding = null;
点击保存按钮:
nameBinding.WriteValue();
textBox.DataBindings.Clear();
nameBinding = null;