为什么所选项目在绑定到同一数据源的多个组合框之间同步?

时间:2013-11-28 07:11:16

标签: c# winforms data-binding combobox

我对使用数据绑定和多个组合框有疑问。

我有一个管理我想要绑定的数据的管理器类。它看起来像这样:

public static class SupplierManager
{
    private static List<Classes.Supplier> _suppliers = null;
    private static BindingSource _bindingSource = null;

    public static void Add(Classes.Supplier supplier)
    {
        if (_suppliers == null)
        {
            _suppliers = new List<Classes.Supplier>();
            _suppliers.Add(new Classes.Supplier());
        }

        if (_bindingSource == null)
        {
            _bindingSource = new BindingSource(_suppliers, null);
        }

        _bindingSource.Add(supplier);
        _suppliers.Sort();
    }

    public static void Remove(Classes.Supplier supplier)
    {
        _bindingSource.Remove(supplier);
        _suppliers.Sort();
    }

    public static BindingSource BindingSource
    {
        get
        {
            if (_suppliers == null)
            {
                _suppliers = new List<Classes.Supplier>();
                _suppliers.Add(new Classes.Supplier());
            }

            if (_bindingSource == null)
            {
                _bindingSource = new BindingSource(_suppliers, null);
            }

            return _bindingSource;
        }
    }
}

我不确定这是否是正确的方法(所有输入都是受欢迎的!)但是这对我有用但是我的问题是当我有2个或更多个组合框连接到相同的BindingSource时它们是同步时,当我在combobox1中选择一个项目时,它也会在combobox2中被选中。

我想要的是组合框中包含相同的数据,并且如果BindingSource更改而不需要刷新特定的组合框(它会更新),它们会更新,但所选项目不应该同步。 / p>

我将数据源设置为这样的组合框:

public ReceiptOUT()
    {
        InitializeComponent();

        this.cmbBxSuppliers.DataSource = Managers.SupplierManager.BindingSource;
        this.cmbBxSuppliers.BindingContext = new BindingContext();
        this.cmbBxSuppliers.SelectedIndex = -1;
    }

欢迎所有帮助(即使它与此问题无关,但也与其他代码无关)!

1 个答案:

答案 0 :(得分:0)

解决这个问题......这么容易我一定是盲目的;)

public static BindingSource BindingSource
{
    get
    {
        if (_suppliers == null)
        {
            _suppliers = new BindingList<Classes.Supplier>();
        }

        return new BindingSource(_suppliers, null);
    }
}

并将List<Classes.Supplier> _suppliers更改为BindingList<Classes.Supplier> _suppliers