WinForms,BindingSource,阻止CurrentItem更改

时间:2009-09-09 16:04:03

标签: c# winforms data-binding focus

如何防止bindingSource Current项目发生变化? (取消参数没有变化事件......)

这是一个场景:

  • 我在同一表单上有一个dataGridView和文本框。
  • 我使用文本框来更改数据源中的值(使用标准数据绑定)
  • 手动编写绑定(单击“保存”按钮后)

  • 当用户使用DataGridView选择另一行时,将更改bindingSource.Current属性,并使用所选行中的值更新文本框。用户输入的更改将丢失。

有什么方法可以防止这个问题吗?

我可以阻止bindingSource.Current属性更改吗?

有没有更好的选择来阻止这种行为?

(禁用dataGridView是不可能的选择)

2 个答案:

答案 0 :(得分:0)

我在同一表单上有一个类似于网格和文本框的框架。当用户单击EDIT按钮(或Add)时,我只是禁用gridview控件本身......

MyDataGrid.Enabled = false;

继续编辑..

然后在SAVE中,如果一切正常,

MyDataGrid.Enabled = true;

答案 1 :(得分:0)

听起来你不想改变bindingSource.Current,而是想在更改当前行之前保存文本框的内容?如果您已将集合绑定到bindingSource,那么文本框是否引用该集合中当前元素的属性?

我不确定你要做什么,但在黑暗中拍摄可能是将同一DataSource绑定到两个不同的BindingSource对象,如下所示:

gridBindingSource.DataSource = theDataSource;
textBoxBindingSource.DataSource = theDataSource;
myDataGrid.DataSource = gridBindingSource;
firstNameTextBox.Bindings.Add (new Binding ("Text", textBoxBindingSource, "FirstName"));

但这很奇怪,因为如果theDataSource适用于网格控件,那么它就是具有FirstName属性的事物的集合。也许如果你在你的问题中更具体。


ETA:如果要将文本框内容保存到当前行,请在ValidateChildren ()属性更改之前调用容器上的bindingSource.Current