首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >master-detail的WinForms程序化绑定

master-detail的WinForms程序化绑定
EN

Stack Overflow用户
提问于 2016-08-09 00:48:02
回答 1查看 416关注 0票数 0

我在左边有一个带有资源管理器风格的TreeView的WinForms应用程序。选择不同的节点将显示由各种其他标准控件组成的不同UserControls。不同UserControls中的所有控件都绑定到单个DataSet。我在树的作用域之上有一个ComboBox (用于在测试和实时设置之间更改)绑定了一个主表,当我在表之间设置了主-详细关系时,更改ComboBox会更改所有子表的当前行。到现在为止还好。

我现在已经添加了plugable子树(从单独的DLL中选取),并且每个子树都使用它自己的DataSet。我遇到麻烦的部分是如何使子树链接到主表。我已经在子树的DataSets中复制了主表(因为DataSets之间的关系不起作用),但是因为子树没有自己的ComboBox,我不确定如何使绑定工作。我想我需要为每个子树创建一个CurrencyManager,并以某种方式将它们链接到组合框的change事件,但是如何将子树的UserControls与CurrencyManager关联起来呢?

EN

回答 1

Stack Overflow用户

发布于 2016-08-10 05:35:23

我遗漏的部分是为子树创建一个BindingContext ...

代码语言:javascript
复制
bindingContext = new BindingContext();

...and然后在子树的UserControls上设置它:

代码语言:javascript
复制
public partial class MyUserControl : UserControl
{
    public MyUserControl(BindingContext bindingContext, DataSet dataSet)
    {
        this.BindingContext = bindingContext;
        InitializeComponent();
        myTextBox.DataBindings.Add("Text", dataSet, "Master.Master_Detail.DetailField");
    }
}

我不明白不需要显式地创建CurrencyManager来链接到DataSet。设置DataBindings就足够了。

保持两个独立的DataSets步调一致只需要这样的方法:

代码语言:javascript
复制
public void MasterChanged(long masterID)
{
    var currencyManager = bindingContext[dataModel.DataSet, "Master"];
    var masterRows = masterTable.Rows;
    for (int position = 0; position < masterRows.Count; position++)
    {
        if (((long)masterRows[position]["ID"]) == masterID)
        {
            currencyManager.Position = position;
            break;
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38834584

复制
相关文章

相似问题

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