我有一个绑定列表,在某些难以重现的条件下,当添加一个值时抛出以下异常:
System.ArgumentException:复杂DataBinding接受IList或IListSource作为数据源。 在System.ComponentModel.ReflectPropertyDescriptor.SetValue(对象组件,对象值)
在System.Windows.Forms.Binding.SetPropValue(对象值)
在System.Windows.Forms.Binding.PushData(布尔力)
在System.Windows.Forms.BindingManagerBase.PushData(布尔和成功)
在System.Windows.Forms.BindingManagerBase.PushData()
在System.Windows.Forms.CurrencyManager.CurrencyManager_PushData()
在System.Windows.Forms.CurrencyManager.OnItemChanged(ItemChangedEventArgs e)
在System.Windows.Forms.CurrencyManager.List_ListChanged(Object sender,ListChangedEventArgs e)
在System.ComponentModel.ListChangedEventHandler.Invoke(Object sender,ListChangedEventArgs e)
在System.ComponentModel.BindingList1.OnListChanged(ListChangedEventArgs e)
1.InsertItem(Int32索引,T项)
at System.ComponentModel.BindingList
在System.Collections.ObjectModel.Collection`1.Add(T item)
...
我可以理解在创建列表或更改其中一个属性时是否发生了这种情况,但这只是在向其添加某些值时才会发生。它的声明如下:
private BindingList<IBusinessObject> _bindingList = new BindingList<IBusinessObject>();
然后像这样使用(这是抛出异常的地方):
_bindingList.Add(myBusinessObject);
更糟糕的是,这在以前正在运行的生产代码中出现,其中此处涉及的所有代码都没有被编辑过。我怀疑这是一种微妙的数据交互问题,这也是为什么它不经常发生的原因,但坦率地说,我很茫然,因为异常的起点在.Net内部深处。
更新的: 它实际上不是单个表单,而是用于支持多个表单/对话框的对象模型的一部分。这是非常复杂的代码,而不是我编写的代码,而只是维护/增强。在挖掘代码之后,看起来BindingList被添加到更多域对象中并最终用于使用对象的字符串属性填充ImageListBox。有问题的字符串永远不应为空或空白,但由于代码所在的位置和难以复制的错误附加调试器进行验证将是有问题的。 null值是否会导致BindingList在问题实际所在的远程删除位置抛出异常?在最终被指定为有问题的ImageListBox列表的数据源之前,该对象实际上被插入到3或4个其他对象/集合中(即使这样,它依赖于其他几个选择,以确切地确定哪个BindingList对象最终用于填充列表)。
答案 0 :(得分:1)
看起来您拥有绑定到IBusinessObject属性的某种列表控件的DataSource属性,并且该属性返回的值不是DataSource。您是否可以更加具体地了解您在此表单上使用的所有绑定?