【问题标题】:BindingContext problem绑定上下文问题
【发布时间】:2011-09-08 23:27:28
【问题描述】:

我在 .NET 应用程序中遇到了 BindingContext 问题。我需要使用相同的数据源填充 6 个组合框,但前 3 个组合框必须独立于后 3 个组合框。

我编写了以下代码:

        combo_Bancos_cheque.DataSource = bancos;
        combo_Bancos_cheque.DisplayMember = "Nombre";
        combo_Bancos_cheque.ValueMember = "IDBanco";
        combo_ctas_cheque.DataSource = bancos;
        combo_ctas_cheque.DisplayMember = "NoCuenta";
        combo_clabe_cheque.DataSource = bancos;
        combo_clabe_cheque.DisplayMember = "CLABE";

        combo_Bancos_dep.BindingContext = new BindingContext();
        combo_Bancos_dep.DataSource = bancos;
        combo_Bancos_dep.DisplayMember = "Nombre";
        combo_Bancos_dep.ValueMember = "IDBanco";
        combo_ctas_dep.DataSource = bancos;
        combo_ctas_dep.DisplayMember = "NoCuenta";
        combo_clabe_dep.DataSource = bancos;
        combo_clabe_dep.DisplayMember = "CLABE";

前 3 个组合框工作正常,当 combo_Bancos_cheque 更改 combo_ctas_cheque 并且 combo_clabe_cheque 也发生更改时,这是预期的行为。然后我创建一个新的 BindingContext 来取消绑定也使用相同数据源的 4,5 和 6 组合框。 这里的问题是:当 combo_Bancos_cheque 值发生变化时,combo_ctas_dep 和 combo_clabe_dep 也会发生变化,但我不希望这样,我需要这些组合框仅在 combo_Bancos_dep 变化时才发生变化。

我是 BindingContexts 的新手,我缺少什么?

【问题讨论】:

  • bancos 的类型是什么 - DataTable?
  • 是一个对象集,我使用实体到SQL

标签: c# .net data-binding combobox


【解决方案1】:

这是一个快速的猜测,但您不需要将组合框 5 和 6 指向与组合 4 (combo_Bancos_dep) 相同的绑定上下文吗?

如果您将新的绑定上下文创建到一个变量中,然后将其设置为 CB 4、5 和 6 会怎样?

编辑: 我只是检查确认,以上是正确的。你真的很接近,你只需要将新的 BindingContext 设置为 combo_ctas_dep 和 combo_clabe_dep。

这是您发布的更改内容:

    combo_Bancos_cheque.DataSource = bancos;
    combo_Bancos_cheque.DisplayMember = "Nombre";
    combo_Bancos_cheque.ValueMember = "IDBanco";
    combo_ctas_cheque.DataSource = bancos;
    combo_ctas_cheque.DisplayMember = "NoCuenta";
    combo_clabe_cheque.DataSource = bancos;
    combo_clabe_cheque.DisplayMember = "CLABE";

    BindingContext oBC = new System.Windows.Forms.BindingContext();
    combo_Bancos_dep.BindingContext = oBC;
    combo_Bancos_dep.DataSource = bancos;
    combo_Bancos_dep.DisplayMember = "Nombre";
    combo_Bancos_dep.ValueMember = "IDBanco";
    combo_ctas_dep.BindingContext = oBC;
    combo_ctas_dep.DataSource = bancos;
    combo_ctas_dep.DisplayMember = "NoCuenta";
    combo_clabe_dep.BindingContext = oBC;
    combo_clabe_dep.DataSource = bancos;
    combo_clabe_dep.DisplayMember = "CLABE";

【讨论】:

    【解决方案2】:

    据我推断,我相信这种行为是意料之中的 - 您将相同的源绑定到组合框。

    我相信这个说法:

        combo_Bancos_dep.BindingContext = new BindingContext(); 
    

    没有做你希望它做的事情——即绑定到一个新的源。

    如果“bancos”是一个DataTable,您可以删除上面的行,然后在“bancos”上进行复制以创建一个新的DataTable并使用它来绑定您的其他组合:

    DataTable copyOfbancos = bancos.Copy();
    combo_Bancos_dep.DataSource = copyOfbancos;
    combo_Bancos_dep.DisplayMember = "Nombre";
    combo_Bancos_dep.ValueMember = "IDBanco";    
    

    【讨论】:

    • 我只是做了一个快速的样本来验证,没有必要制作一个重复的数据表来完成这个。通过使用不同的 BindingContext 可以以最小的开销完成,他只是没有把它放在一起。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 2012-03-26
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多