我在左边有一个带有资源管理器风格的TreeView的WinForms应用程序。选择不同的节点将显示由各种其他标准控件组成的不同UserControls。不同UserControls中的所有控件都绑定到单个DataSet。我在树的作用域之上有一个ComboBox (用于在测试和实时设置之间更改)绑定了一个主表,当我在表之间设置了主-详细关系时,更改ComboBox会更改所有子表的当前行。到现在为止还好。
我现在已经添加了plugable子树(从单独的DLL中选取),并且每个子树都使用它自己的DataSet。我遇到麻烦的部分是如何使子树链接到主表。我已经在子树的DataSets中复制了主表(因为DataSets之间的关系不起作用),但是因为子树没有自己的ComboBox,我不确定如何使绑定工作。我想我需要为每个子树创建一个CurrencyManager,并以某种方式将它们链接到组合框的change事件,但是如何将子树的UserControls与CurrencyManager关联起来呢?
发布于 2016-08-10 05:35:23
我遗漏的部分是为子树创建一个BindingContext ...
bindingContext = new BindingContext();...and然后在子树的UserControls上设置它:
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步调一致只需要这样的方法:
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;
}
}
}https://stackoverflow.com/questions/38834584
复制相似问题