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 :

Databinding avec des collections


Sujet :

C#

  1. #1
    En attente de confirmation mail
    Inscrit en
    Janvier 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 70
    Points : 60
    Points
    60
    Par défaut Databinding avec des collections
    Bonjour à tous,

    Je n'ai jamais utilisé de databinding jusqu'à maintenant. Pour afficher des collections de données dans des ListView, GridView, ComboBox, etc. J'ai toujours rempli ceux-ci manuellement dans le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach (Livre livre in LivreCollection)
    {
       ListViewItem livreListViewItem = new ListViewItem(livre.Titre);
       livresListView.Items.Add(livreListViewItem);
    }
    etc.

    J'ai lu sur le databinding sur MSDN et je crois qu'utiliser le databinding allégerait mon code. D'après ce que je comprends, je ne serais pas obligé de me coder ma propre méthode (que j'appelle toujours RefreshListView) qui va effacer tous les items du ListView et va réinsérer les items de ma collection (en cas de changement dans celle-ci).

    J'utilise beaucoup de ListView et presque jamais de GridView (bon ou pas bon ? je ne connais même pas les véritables avantages et les raisons qui devraient me pousser à préférer l'un à l'autre dépendamment des cas).

    J'ai une classe Livre et une classe LivresCollection. La classe LivresCollection hérite de la classe List<T>.

    J'aimerais "databinder" mon ListView directement sur ma collection LivresCollection. J'imagine que si j'enlève/modifie/ajoute des éléments de ma collection, le ListView se mettra à jour automatiquement, m'évitant ma fameuse méthode RefreshListView() ? Parce que c'est le seul avantage que je verrais au databinding : m'éviter de coder moi-même la gestion de l'affichage du ListView en fonction des données affichées.

    En utilisant l'IDE, dans la boîte de propriétés de mon ListView, sous DataBindings, je clique sur le bouton "..." et de là je choisis "New Data Source". Étant donné que ma DataSource n'est pas un élément de base de données, je choisis "Objet" (je veux binder à ma collection LivresCollection). Une fois ceci choisi, je n'ai aucunement accès à ma collection LivresCollection. Je ne comprends pas pourquoi je ne peux pas naviguer dans les éléments de mon assembly. Peut-être que j'ai mal saisi à quoi la propriété DataBindings sert ?

    Enfin, ce que je souhaite faire, c'est m'éviter d'écrire du code superflu si un quelconque composant du CLR peut le gérer pour moi. S'il est possible de "binder" un ListView à une collection, je préférerais procéder ainsi. Par contre, je suis complètement bloqué à l'heure actuelle.

    La majorité des exemples que j'ai trouvé sur le web concernent le databinding de GridView à des DataSet, ce qui me semble relativement facile. Dans mon cas, je veux pouvoir le faire directement sur les collections que j'ai créées moi-même.

    Merci d'avance pour vos éclaircissements.

  2. #2
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 159
    Points : 486
    Points
    486
    Par défaut
    Ca se fait assez simplement de cette façon : (mais je ne suis pas sur d'avoir bien saisi ta question)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    livreListView.DataSource = LivreCollection;
    livreListView.DataBind();

  3. #3
    En attente de confirmation mail
    Inscrit en
    Janvier 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 70
    Points : 60
    Points
    60
    Par défaut
    La classe ListView ne possède pas la propriété DataSource ...

    Est-ce que vous utilisez des ListView fréquemment dans vos interfaces ? Sinon quelle est la meilleure alternative ?

    Si je comprends bien, il n'est pas possible de faire du databinding facilement avec un ListView ?

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Non le listview n'est pas bindable.

  5. #5
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 159
    Points : 486
    Points
    486
    Par défaut
    Au temps pour moi, apres qques recherches le System.Web.UI.WebControls.ListView est bien bindable, contrairement à ses homologues Windows.Forms et WPF.

  6. #6
    En attente de confirmation mail
    Inscrit en
    Janvier 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 70
    Points : 60
    Points
    60
    Par défaut
    Si le ListView (System.Windows.Forms.ListView) n'est pas bindable, à quoi sert sa propriété DataBindings ?

    (Est-ce que cela veut dire que pour gérer au mieux mes données, je devrais remplacer mes ListView par des GridView ? Je trouve ça un peu archaïque de devoir me coder mes propres fonctions de rafraichissement)

  7. #7
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    La propriété DataBindings permet par exemple de lier la propriété BackColor avec une autre propriété de type Color.


    (Est-ce que cela veut dire que pour gérer au mieux mes données, je devrais remplacer mes ListView par des GridView ? Je trouve ça un peu archaïque de devoir me coder mes propres fonctions de rafraichissement)
    Je ne vois pas ce que tu veux dire par là. Peux tu être plus clair ?

  8. #8
    En attente de confirmation mail
    Inscrit en
    Janvier 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 70
    Points : 60
    Points
    60
    Par défaut
    Je croyais que le databinding était justement utile pour nous éviter de coder nous-mêmes nos méthodes de rafraichissement des données dans les contrôles.

    Exemple : J'ai une collection de livres que je veux afficher dans mon ListView. Je dois m'écrire une méthode qui prend ma collection en paramètre et qui crée des ListViewItems pour chaque livre.

    Si l'utilisateur ajoute / modifie / détruit, un ListViewItem, je dois appeler une autre méthode que je devrai moi-même écrire pour mettre à jour ma collection en fonction des changements apportés.

    Et si ma collection est altérée par un autre bout de code (exemple, un bouton qui mettrait à jour ma collection à partir de la base de données), je dois rafraichir ce qui est dans le ListView pour que les changements soient pris en compte.

    Ce sont ces opérations là que je croyais que le databinding m'éviterait.

    Est-ce plus clair ?

    Merci

Discussions similaires

  1. [Struts-Layout] Collection avec des checkbox
    Par valkeke dans le forum Struts 1
    Réponses: 6
    Dernier message: 12/12/2009, 12h20
  2. Réponses: 1
    Dernier message: 05/06/2009, 22h39
  3. Utilisation du package DBMS_SQL avec des collections
    Par f-demu01 dans le forum PL/SQL
    Réponses: 2
    Dernier message: 27/10/2008, 14h57
  4. Réponses: 2
    Dernier message: 21/02/2007, 11h22

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