Error Databindings.clear() avec null value

Résolu
edwinzap Messages postés 149 Date d'inscription samedi 29 septembre 2012 Statut Membre Dernière intervention 21 juin 2016 - Modifié par edwinzap le 20/06/2016 à 12:35
edwinzap Messages postés 149 Date d'inscription samedi 29 septembre 2012 Statut Membre Dernière intervention 21 juin 2016 - 21 juin 2016 à 19:30
Bonjour,
J'ai une erreur que dont je ne trouve aucune solution.
J'ai la propriété text d'un label à un objet. Seulement, lorsque cet objet est remplacé par un autre, il me faut refaire le binding.

J'ai donc ceci:
Label_TempsTour.DataBindings.Clear();
Binding bs = new Binding("Text", courante.Course, "MeilleurTempsTour.Temps", true,DataSourceUpdateMode.OnPropertyChanged,"null");
bs.Format += new ConvertEventHandler(this.MeilleurTemps_Format);
Label_TempsTour.DataBindings.Add(bs);


L'ennui c'est qu'il me faut que la valeur liée au binding puisse être null. Tout fonctionne parfaitement jusqu'au moment ou je dois refaire mon binding. J'obtiens alors cette erreur à la ligne contenant le databindings.clear():
"System.ArgumentNullException: La valeur ne peut pas être null.
Nom du paramètre : component
à System.ComponentModel.ReflectPropertyDescriptor.RemoveValueChanged(Object component, EventHandler handler)
à System.Windows.Forms.BindToObject.CheckBinding()
à System.Windows.Forms.Binding.CheckBinding()
à System.Windows.Forms.Binding.SetBindableComponent(IBindableComponent value)
à System.Windows.Forms.ControlBindingsCollection.ClearCore()
à System.Windows.Forms.BindingsCollection.Clear()
à System.Windows.Forms.ControlBindingsCollection.Clear()
à [...]"

D'avance merci

1 réponse

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
21 juin 2016 à 11:39
Bonjour,

que veux tu dire par
Seulement, lorsque cet objet est remplacé par un autre, il me faut refaire le binding.


Que par exemple c'est toto qui est bindé et à un moment toto = tata, ou toto = new trucmiche() ou encore tu bindes tata?

Une solution, applicable dans ces 3 cas serait de binder une collection (avec un objet bindingsource, voir exemple http://codes-sources.commentcamarche.net/faq/1291-utilisation-du-binding-au-travers-de-l-objet-databindingsource ici]) , d'ajouter, remplacer ou supprimer des items à la collection et juste positionner le courant à l'item que tu veux voir.
0
edwinzap Messages postés 149 Date d'inscription samedi 29 septembre 2012 Statut Membre Dernière intervention 21 juin 2016 2
21 juin 2016 à 12:21
Pour l'instant, j'ai une courante.course qui est la course sur laquelle on travail. Tous mes controles sont donc bindes à cette course. Mais lorsque la course change (je charge une nouvelle course ou ajoute une nouvelle course (comme un nouveau document dans word), mon courante.course change. Il me faut donc re binder correctement tous mes controles à cette nouvelle course (ce qui doit se faire rarement, mais qd même parfois). Tous fonctionnait, hormis ce Clear() qui ne veut pas se faire lorsque la valeur de l'objet binde est null (je ne comprends d'ailleurs pas pq il a besoin de faire une telle vérification pour simplement vider ses databindings...)

Je vais regarder du coté bindingsource mais ce que j'ai fait correspond déjà au bindingsource (class course avec INotifyPropertyChanged et avec BindingList) Je ne stocke juste pas l'ensemble des courses dans un objet. Qd il me faut charger une course, j'effectue une requête sur la database.

Merci
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
Modifié par Whismeril le 21/06/2016 à 13:23
Ok, si tu passes par une collection, même de 0 à 2 courses, y'en a pas (plus) celle courante et la future courante, ça devrait le faire puisque la référence bindée c'est la collection qui ne change pas, seul le contenu évolue.

L'autre solution c'est WPF où le binding est bien mieux géré
0
edwinzap Messages postés 149 Date d'inscription samedi 29 septembre 2012 Statut Membre Dernière intervention 21 juin 2016 2 > Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024
21 juin 2016 à 16:42
Aucune idée d'où vient l'erreur ?
(Pour le WPF, j'y ai pensé, mais je suis à court de temps pour apprendre et mettre le tout en place (le programme devant être fonctionnel pour ce samedi !)
0
edwinzap Messages postés 149 Date d'inscription samedi 29 septembre 2012 Statut Membre Dernière intervention 21 juin 2016 2
21 juin 2016 à 19:30
J'ai trouvé mon erreur... Je mettais l'objet à null et non la propriété de l'objet ! Donc la binding posait problème dans certains cas

Encore merci pour les solutions et les liens, ça m'a permis d'avancer et d'apprendre encore et toujours ;)
0
Rejoignez-nous