首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更改数据源时更新绑定控件的更好方法

更改数据源时更新绑定控件的更好方法
EN

Stack Overflow用户
提问于 2013-02-18 17:05:35
回答 2查看 12.8K关注 0票数 4

问题所在。对于窗体本身上的大量文本框,我对窗体上的属性中的字段进行了数据绑定。我不仅要更改属性中的字段值,还要更改整个属性(重置为先前保存的默认值)。

我想做的是这样的:

代码语言:javascript
运行
复制
((CurrencyManager)BindingContext[Row]).Refresh();

不工作,BindingContext[Row]是一个PropertyManager,而不是一个CurrencyManager,并且没有刷新方法。PushData()是受保护的,不可访问。我也试着调用this.Refresh(),在每个控件上我尝试调用c.Refresh...Now什么?

下面是我目前使用的代码:

代码语言:javascript
运行
复制
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
}

更新I将数据库设置为完整的绑定字符串,以查看设置null值默认值是否有任何效果,但没有。

代码语言:javascript
运行
复制
txtAzimuth.DataBindings.Add(new NullableBinding("Text", Row, "Azimuth", true, DataSourceUpdateMode.OnPropertyChanged, ""));

Row是表单本身的公共属性。ResetRow是窗体上的私有属性,它分配给表单加载中初始行的克隆,并且从未更改,它充当备份。某些属性(但不是全部)的值被允许为null,并且应该以空字符串的形式显示。这就是NullableBinding类在幕后所做的事情

有人能想到比删除和重新应用每一个数据库更好的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-18 17:15:32

使用Binding.ReadValue可能会省去解除绑定和重新绑定的麻烦,前提是要绑定的对象保持不变

代码语言:javascript
运行
复制
foreach (Control c in pnlBody.Controls)
    foreach (Binding b in c.DataBindings)
        b.ReadValue();

另一方面,如果您要更改基础绑定对象,则这将无法工作。我建议将BindingSource放在BindingRow对象之间,这样您只需要重新绑定绑定源,而不是单独绑定所有50个绑定。通过调用BindingSource.CancelEdit()或重置数据源:

代码语言:javascript
运行
复制
RowBindingSource.DataSource = null;
RowBindingSource.DataSource = this.Row;
票数 7
EN

Stack Overflow用户

发布于 2016-02-03 01:59:31

试试这个:TableAdapter.Fill(dataTable)

我的例子:this.bankingaccountTableAdapter.Fill(this.bankDataSet.bankingaccount);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14941537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档