当BindingSource修改时,ComboBox SelectedItem会更改

时间:2013-12-02 09:19:27

标签: c# winforms combobox bindingsource bindinglist

我的类管理器中有一个方法,当我的backgroundworker完成后运行并更新BindingList(_suppliers),它看起来像这样:

private void _bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        _suppliers.Clear();
        foreach (Classes.Supplier s in (BindingList<Classes.Supplier>)e.Result)
            _suppliers.Add(s);
    }

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

            return new BindingSource(_suppliers, null);
        }
    }

(我使用.Clear()然后循环和.Add()的原因是因为如果我用户_suppliers = new BindingList<Classes.Supplier>(func.LoadSuppliers()); BindingList永远不会更新绑定控件......我不喜欢它)

我的问题是,当_suppliers被修改后,它会更改与我相关的所有组合框中的选择,这是不需要的。

我绑这样的组合框:

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

            return new BindingSource(_suppliers, null);
        }
    }

我修改它们是这样的:

public bool Add(Classes.Supplier supplier)
    {
        if (_suppliers == null)
        {
            _suppliers = new BindingList<Classes.Supplier>();
        }

        using (SQLiteFunction func = new SQLiteFunction())
        {
            try
            {
                if (func.AddSupplier(supplier))
                    _suppliers.Add(supplier);
            }
            catch (Exception ex)
            {
                Helper.ExceptionHandler(ex, "SupplierManager", "Add");
                return false;
            }
        }

        return true;
    }

有没有人对如何绕过这个有任何想法?如果用户在列表中选择了一个项目,我希望选择保留......如果可能的话,那么设置.SelectedIndex = -1或类似的东西也是不可能的。

一如既往,所有的帮助和评论都是适用的。

1 个答案:

答案 0 :(得分:0)

这是预期的行为。 您正在回调_bw_RunWorkerCompleted期间删除数据源“_suppliers.clear()”的内容。所以之后没有选定的项目。

要绕过此项,请记住所选项目,并在重新创建列表后进行分配。 也许你必须实现selchange eventhandler不会被解雇。