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
A voir également:
Fopen c#
Unexpected return value java - Meilleures réponses
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.
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é
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 !)
21 juin 2016 à 12:21
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
Modifié par Whismeril le 21/06/2016 à 13:23
L'autre solution c'est WPF où le binding est bien mieux géré
21 juin 2016 à 16:42
(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 !)
21 juin 2016 à 19:30
Encore merci pour les solutions et les liens, ça m'a permis d'avancer et d'apprendre encore et toujours ;)