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 :

Bind une liste sur une ListView multicolonne


Sujet :

C#

  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Bind une liste sur une ListView multicolonne
    Bonjour

    J'essaye de voir s'il est possible de faire un truc un peu tordu

    J'ai une liste de classe de type A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class B
    {
       public string Nom {get;set;}
    }
     
    public class A
    {
       public int TP {get;set;}
       public int valeur;
       public List<B> lB = new List<B>();
    }
     
    public List<A> lA=new List<A>();
    J'aimerais binder ma liste lA sur une listview et afficher deux colonnes,
    ID et le Count de b

    Est-ce possible ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Hélas, non : le contrôle ListView ne peut pas être bindé, contrairement à une ListBox par exemple. Dommage, ça limite beaucoup son intérêt...
    Tu peux faire quelque chose de similaire en utilisant un DataGridView à la place. Par contre, il faudrait transformer les champs publics de ton objet en propriétés (avec des accesseurs get/set) pour que ça fonctionne. Pour le count de B, indique dans le DataPropertyName de la colonne "lB.Count"

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut

    Merci TomLev

    Et avec une listbox ca marcherait ?

    Je me suis mal exprimé

    J'aimerais binder ma liste lA sur une listview et afficher deux colonnes,
    ID et le Count de b
    C'est TP (qui a déja un accesseur)
    Et Count de B que je voudrais afficher

    Si je fais avec une ListView

    Je fais DisplayMember= "TP";

    Mais pour le Count de B j'a pas bien compris comment et ou je devais le declarer soit pour le ListBox, soit pour le DGV

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    un ListBox permet de binder sur une source de données (avec la propriété DataSource), mais ne peut pas afficher plusieurs colonnes

    Pour le Count de B, 2 solutions :
    - créer un accesseur pour lB.Count :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public int CountB { get { return lB.Count; } }
    Dans ce cas tu mets "CountB" dans le DisplayMember (ou le DataPropertyName de la colonne si tu utilises un DataGridView)

    - créer un accesseur pour LB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public List<B> ListeB { get { return lB; } }
    Et dans ce cas tu mets "ListeB.Count" comme DisplayMember ou DataPropertyName

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci Tomlev

    Je vois !
    Donc ListBox no way pour avoir deux colonnes

    Et tu viens d'eclairer unn peu plus ma lanterne sur l'usage indirect d'un accesseur !

    Je vais chipooter ave le DGV et voir ce que ca donne !

  6. #6
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Magnifique

    J'ai essayé dans le DGV
    Le coup de l'accesseur pour capter le count de ma liste secondaire c'est magique !

    C'est sur ces coup la qu'on apprécie la vraie saveur et l'utilité subtile des accesseurs !

    Mais je retombe quand meme sur un bingz du DGV que j'avais déja rencontré, c'est que l'ordre d'affichage des colonnes ne suit pas forcément l'ordre des déclarations

  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
    Par défaut
    Il suffit de ne pas autogénérer les colonnes et de les créer à la main. En utilisant un bindingsource, tu devrais pouvoir faire ça très simplement en mode design.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. [SP-2010] Faire une somme sur une colonne d'une liste
    Par sebfreu dans le forum SharePoint
    Réponses: 6
    Dernier message: 19/01/2012, 11h05
  3. binder une combo sur une list ou une autre
    Par chris81 dans le forum Windows Presentation Foundation
    Réponses: 10
    Dernier message: 12/02/2009, 12h01
  4. Réponses: 8
    Dernier message: 30/09/2006, 05h18
  5. rafraichir une page sur une liste de selection
    Par klimero dans le forum Général JavaScript
    Réponses: 26
    Dernier message: 20/07/2006, 15h52

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