Salut
Est ce que qqn pourrais m expliquer le principe de Databinding et DataSource ? comment on l utilise ?
Quelle est la difference entre le DataSource du Designer et la propriete DataSource du Databinding ?
Thx @++
Salut
Est ce que qqn pourrais m expliquer le principe de Databinding et DataSource ? comment on l utilise ?
Quelle est la difference entre le DataSource du Designer et la propriete DataSource du Databinding ?
Thx @++
J'ai observé un comportement dernièrement qui m'a paru étrange mais que l'on m'a expliqué.
Je vais te le décrire quelque fois que cela t'éclairer :
Prends trois combobox -> affecte leur la meme source.
Lorsque tu joue avec la propriété SelectedItem, les 3 combobox sont affectées.
En fait tu ne joues pas avec le SelectedItem de la combobox mais avec celui de la source.
Je n'ai pas encore essayé le DataBindings mais je me dit qu'il permet peut être cette fois-ci de ne pas affecter les propriétés de la source, mais plutôt celle de la combobox.
Enfin je peut me planter aussi
Quand j'irais faire un tour sur google je te dirais cela
Les DataBindings d'un contrôle permettent de lier une propriété d'un contrôle à une propriété d'un autre objet.
Une DataSource indique l'endroit où le Control va pécher les données qu'il présente.
exemple :
DataSource : Chaque ligne de maCombo sera un Client, représenté visuellement par sa propriété Nom.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 class Client { public string Nom {get {...} set {...} } public bool EstChauve {get {...} set {...} } } List<Client> clients = new List<Client>(); // Datasource maCombo.DataSource = clients; maCombo.DisplayMember = "Nom"; // dataBindings maCheckBox.DataBindings.Add("Checked", monClient, "EstChauve", false, DataSourceUpdateMode.OnPropertyChanged);
DataBinding : la propriété "estChauve" de l'objet "monClient" est liée à la propriété "Checked" de maCheckBox.
Tu peux combiner les deux : une combo aura une datasource de type IList<Client> pour la remplir, et on pourra lier sa propriété "SelectedItem" à une propriété de type Client d'un objet.
Voilà l'idée
Sympathique exemple
Un conseil :
Pour des liaisons au données, préférez BindingList<> qui offre plus de fonctionnalités concernant la liaison aux composants UI par rapport à List<>.
Pour la différence entre le datasource que tu affectes a une propriété datasource d'un composant ou celui que tu utilises pour binder une propriété, c'est simple, il y en a pas.
C'est juste deux usages différents :
Les composants ayant une propriété datasource sont surtout ceux qui affichent ou manipulent non pas un seul objet mais des collections entières telles que des datasets, des listes ou vecteurs d'objets, etc... Parmi eux on retrouve les combos, le listview, les datagridview....
En revanche, on utilise databindings pour définir une liaison entre une PROPRIETE d'un composant graphique et une PROPRIETE d'un objet que l'on spécifie comme datasource. Generalement, ce sont ceux qui travaillent sur un objet à la fois tels que les textbox, les checkbox etc...
Merci Tlm
Si l on utilise le Datasource pour mettre , par exemple une liste d object, a quoi correspond la liste qui est dans le BindingSource ?
Le clear ne modifie pas le Datasource de monBindingSource ....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 monBindingSource.Add(...); monBindingSource.Clear();
Thx ++
Ne pas confondre DataSource, Bindings et BindingSource
Le BindingSource est un objet (malheureusement non generique, mais aucun controle ne l'est alors...) qui peut se placer entre ta list metier (ou comme l'a fait justement remarquer _skip une BindingList pour que toutes les modifs soient repercutees sur le controle) et le controle. Par exemple, dans le cas du probleme souleve par ced600 dans son thread sur le comportement des ComboBox et de SelectedItem, mettre une BindingSource entre la source et chaque combobox permet d'avoir 3 SelectedItem differents.
Le BindingSource permet a la fois d'avoir une vue / un wrapper (comme la DataView) sur un autre conteneur, mais permet aussi l'ajout direct d'elements (comme la DataTable). Clear() va supprimer tous les elements que tu as ajoute via Add(), mais pas les elements qui ne sont qu'une "vue" de ceux de la DataSource.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 maBindingSource.DataSource = maListaMoi; monControl.DataSource = maBindingSource;
(et encore, je sais plus si on peut a la fois faire Add et avoir une DataSource, me semble que c'est soit l'un soit l'autre)
M'enfin c'est vrai que quand on rajoute dans les sources de donnees du projet une source basee sur le type d'un objet, et qu'on choisit cette source pour un DataGridView, le designer colle automatiquement un BindingSource dont la source est typeof(Client). Utile pour choisir et ordonner les proprietes qu'on veut afficher dans la grille via le designer, mais pas forcement necessaire.
Sur ce, bonne nuit
j'avais pas tout compris à cette histoire en fait. Maintenant c'est fait
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager