我的类管理器中有一个方法,当我的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
或类似的东西也是不可能的。
一如既往,所有的帮助和评论都是适用的。
答案 0 :(得分:0)
这是预期的行为。 您正在回调_bw_RunWorkerCompleted期间删除数据源“_suppliers.clear()”的内容。所以之后没有选定的项目。
要绕过此项,请记住所选项目,并在重新创建列表后进行分配。 也许你必须实现selchange eventhandler不会被解雇。