2009-05-21 2 views
1

J'ai une liste contraignante, que, dans certaines conditions difficiles à reproduire est de lancer l'exception suivante lorsqu'une valeur est ajoutée à elle:Pourquoi est-ce BindingList jeter un System.ArgumentException lorsque vous ajoutez un membre

système .ArgumentException: DataBinding complexe accepte comme source de données un IList ou un IListSource. à System.ComponentModel.ReflectPropertyDescriptor.SetValue (composante d'objet, la valeur de l'objet)
à System.Windows.Forms.Binding.SetPropValue (valeur de l'objet)
à System.Windows.Forms.Binding.PushData (force Boolean)
à System.Windows.Forms.BindingManagerBase.PushData (Boolean & succès)
à System.Windows.Forms.BindingManagerBase.PushData()
à System.Windows.Forms.CurrencyManager.CurrencyManager_PushData()
à System.Windows. Forms.CurrencyManager.OnItemChanged (ItemChangedEventArgs e)
à System.Windows.Forms.Cu rrencyManager.List_ListChanged (de l'expéditeur de l'objet, ListChangedEventArgs e)
à System.ComponentModel.ListChangedEventHandler.Invoke (expéditeur d'objet, ListChangedEventArgs e)
à System.ComponentModel.BindingList 1.OnListChanged(ListChangedEventArgs e)
at System.ComponentModel.BindingList
1.InsertItem (index Int32, point T)
au système .Collections.ObjectModel.Collection`1.Add (point T)
...

Je pourrais comprendre si ce qui se passait lors de la création de la liste, ou de modifier l'une des propriétés, mais cela ne se produit lorsque en ajoutant certaines valeurs à cela. Il est déclaré comme suit:

private BindingList<IBusinessObject> _bindingList = new BindingList<IBusinessObject>(); 

Et puis utilisé plus tard comme si (ce qui est l'endroit où l'exception est levée):

_bindingList.Add(myBusinessObject); 

Pour aggraver les choses ce phénomène se produit dans le code de production travaillant précédemment où aucun du code impliqué ici a été édité récemment. Je soupçonne qu'il s'agit d'une sorte de problème subtil d'interaction de données qui est aussi pourquoi il se produit rarement, mais franchement, je suis à perte car le point d'origine de l'exception est profondément dans les internes .Net.

Mise à jour: Il ne s'agit pas réellement d'une forme unique, mais plutôt d'une partie du modèle objet utilisé pour sauvegarder plusieurs formulaires/boîtes de dialogue. C'est un code très complexe, et pas un code que j'ai écrit mais que je suis simplement en train de maintenir/améliorer. Après avoir exploré le code, il semble que BindingList soit ajouté à d'autres objets de domaine et soit utilisé pour peupler un ImageListBox à l'aide d'une propriété de chaîne de l'objet. La chaîne en question ne doit jamais être nulle ou vide, mais en raison de l'emplacement du code et de la difficulté à reproduire l'erreur d'attachement d'un débogueur à vérifier sera problématique. Une valeur nulle peut-elle provoquer l'exception BindingList à un emplacement si éloigné de l'endroit où le problème est situé? Cet objet est littéralement inséré dans 3 ou 4 autres objets/collections avant d'être éventuellement assigné comme source de données à la liste ImageListBox en question (et même alors il dépend de quelques autres sélections pour savoir exactement lequel des objets BindingList est finalement utilisé pour remplir la liste).

Répondre

1

Il semble que vous ayez la propriété DataSource d'un contrôle List lié à une propriété de votre IBusinessObject et cette propriété renvoie une valeur qui n'est pas valide en tant que DataSource.Pouvez-vous être plus précis sur toutes les liaisons que vous utilisez sur ce formulaire?

Questions connexes