【问题标题】:Databinding issue in C#C#中的数据绑定问题
【发布时间】:2012-10-15 14:03:11
【问题描述】:

我对 C# 中的 DataBindings 有疑问。

我有一个 BindingSource,它的 DataSource 设置为 DataRowView

然后我使用绑定源为我的控件设置所有数据绑定。

这是我的代码:

bsDataRecord.DataSource = myDataRow; //bsDataRecord is a BindingSource and myDataRow is a DataRowView
//Add Databinding to my controls
dateNextDate.DataBindings.Add("Value", bsDataRecord, "Next_Date", false, DataSourceUpdateMode.OnPropertyChanged); //DateTimePicker
textInformation.DataBindings.Add("Text", bsDataRecord, "Information", false); //TextBox
//more controls, etc

我的数据绑定一切正常。因此,当我选择控件并输入一个值时,myDataRow 就会更新。

当我尝试在代码中设置控件的值时出现问题,例如

textInformation.Text="Test";

当我这样做时,myDataRow 没有更新。我可以让 myDataRow 更新的唯一方法是提供我已更新焦点的控件。

希望这是有道理的!?有人有什么想法吗?

提前致谢。

我正在使用 c#.Net 4.0。

【问题讨论】:

  • 希望对您有所帮助:stackoverflow.com/questions/1497489/…
  • 为什么不反其道而行之?更新数据,控件应显示新值。
  • 我确实尝试过,但即使在我保存并接受更改后,我的数据行的 RowState 也会更新为已修改

标签: c# data-binding


【解决方案1】:

在有问题地设置数据源的属性后,您需要让控件从数据源中重新读取它们的值。通常是一个简单的调用

dataBindingSource.ResetBindings(false); // false for value change not schema change

但您也可以按控件使用:

foreach (Binding b in myControl.DataBindings) b.ReadValue();

Binding.ReadValue() 使控件的绑定属性设置为数据源值

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    如果您“手动”更新(非双向)绑定的目标,则会破坏绑定并且它将不再起作用。这是正常行为。

    所以让你的绑定双向实现你想要做的。

    【讨论】:

    • 感谢您的回复。那只是我可以设置的属性吗?
    • 对不起,我不明白你的评论:/
    • 如何进行双向绑定?
    猜你喜欢
    • 2016-03-16
    • 1970-01-01
    • 2022-06-11
    • 2011-01-17
    • 2013-04-12
    相关资源
    最近更新 更多