IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Question sur DataBinding et Datasource


Sujet :

C#

  1. #1
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut Question sur DataBinding et Datasource
    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 @++

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    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
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  3. #3
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    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 :
    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);
    DataSource : Chaque ligne de maCombo sera un Client, représenté visuellement par sa propriété Nom.
    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
    ಠ_ಠ

  4. #4
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    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...

  5. #5
    Membre averti Avatar de Seth77
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 448
    Points : 410
    Points
    410
    Par défaut
    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 ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    monBindingSource.Add(...);
    monBindingSource.Clear();
    Le clear ne modifie pas le Datasource de monBindingSource ....

    Thx ++

  6. #6
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    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.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    maBindingSource.DataSource = maListaMoi;
    monControl.DataSource = maBindingSource;
    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.
    (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
    ಠ_ಠ

  7. #7
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    j'avais pas tout compris à cette histoire en fait. Maintenant c'est fait
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

Discussions similaires

  1. Question sur les "scripts" "datasource"
    Par rouletabille63 dans le forum BIRT
    Réponses: 2
    Dernier message: 22/08/2012, 12h41
  2. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  4. Réponses: 2
    Dernier message: 11/08/2002, 21h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo