Error Databindings.clear() avec null value [Résolu]

edwinzap 159 Messages postés samedi 29 septembre 2012Date d'inscription 21 juin 2016 Dernière intervention - 20 juin 2016 à 12:34 - Dernière réponse : edwinzap 159 Messages postés samedi 29 septembre 2012Date d'inscription 21 juin 2016 Dernière intervention
- 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
Afficher la suite 

Votre réponse

5 réponses

Whismeril 12122 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 21 octobre 2018 Dernière intervention - 21 juin 2016 à 11:39
0
Merci
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.
edwinzap 159 Messages postés samedi 29 septembre 2012Date d'inscription 21 juin 2016 Dernière intervention - 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
Whismeril 12122 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 21 octobre 2018 Dernière intervention - 21 juin 2016 à 13:22
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é
edwinzap 159 Messages postés samedi 29 septembre 2012Date d'inscription 21 juin 2016 Dernière intervention > Whismeril 12122 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 21 octobre 2018 Dernière intervention - 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 !)
edwinzap 159 Messages postés samedi 29 septembre 2012Date d'inscription 21 juin 2016 Dernière intervention - 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 ;)
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.