问题。对于表单本身的大量文本框,我对表单上的属性中的字段进行了数据绑定。我不仅要更改属性中的字段值,还要更改整个属性(重置为以前保存的默认值)。
我想做的是这样的:
((CurrencyManager)BindingContext[Row]).Refresh();
不起作用,BindingContext[Row]
是 a PropertyManager
,不是 a CurrencyManager
,并且没有刷新方法。 PushData()
受保护且不可访问。我也尝试调用this.Refresh()
,并分别在我尝试调用的每个控件上c.Refresh
...现在呢?
这是我目前使用的代码:
private void btnReset_ButtonClicked(object sender, EventArgs e)
{
Row = ResetRow.Clone();//use clone to break the reference, dont want to be updating the ResetRow when Row fields change.
foreach (Control c in pnlBody.Controls)
if (c.DataBindings.Count > 0)
c.DataBindings.Clear();
DataBindandSet();//re-apply all the databindings (50)
}
//just a sample of the databinding function itself
private void DataBindandSet()
{
txtAzimuth.DataBindings.Add(new NullableBinding("Text", Row, "Azimuth", true));
txtBHTemp.DataBindings.Add(new NullableBinding("Text", Row, "BHTemp", true));
//repeat 48 more times
}
更新 我将数据绑定设置为完整的数据绑定字符串,以查看设置空值默认值是否有任何效果,它没有。
txtAzimuth.DataBindings.Add(new NullableBinding("Text", Row, "Azimuth", true, DataSourceUpdateMode.OnPropertyChanged, ""));
Row
是表单本身的公共属性。 ResetRow
是表单上的私有属性,它分配给表单加载上初始行的克隆并且从未更改,它用作备份。 某些属性(但不是全部)的值允许为空,并且应显示为空字符串。这就是 NullableBinding 类在幕后所做的
谁能想到比删除和重新应用每一个数据绑定更好的方法?