none
Objet dans une Listbox

    Discussion générale

  • Bonjour tout le monde,

    La ListBox comporte une propriété DataMember, pour préciser quel champ des enregistrements on veut faire apparaître.

    Je l'ai remplie avec une liste générique, et contrairement à ce qui se passe avec une DataGridView, ce qui apparaissait dans la liste était le type d'objet, répété autant de fois qu'il y a d'enregistrements. Je m'en suis sorti en déclarant une nouvelle fonction ToString() dans la classe.

    Est-ce parce que j'ai loupé quelque chose, ou c'est bien comme ça que c'est prévu ?

    Si on veut présenter plusieurs colonnes il faut une ListView, n'est-ce pas ?

    Là je m'en suis sorti en mettant une police à espacement fixe, et en mettant des séparateurs dans le ToString(). Ce n'est pas très orthodoxe mais ça marche et c'est plus vite programmé que la ListView.


    mercredi 13 décembre 2017 17:05

Toutes les réponses

  • Bonjour Gloops,
    Pouvez-vous nous donner un exemple de code pour voir comment remplissez-vous le ListBox  ainsi qu'un exemple concernant DataGridView pour pouvoir clarifier le sujet?

    Cordialement,
    Nina


    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    jeudi 14 décembre 2017 15:47
    Modérateur
  • Bonjour,

    Hum ... Oui, ça peut se faire.

    Je remplis la List<FactureListee> par quelque chose de ce type :

                if (reader.HasRows)
                {
                    //for (int c = 0; c < reader.FieldCount; c++)
                    //{
                    //    System.Diagnostics.Debug.WriteLine(c.ToString("00") + " ; " + reader.GetName(c) + " ; " + reader.GetFieldType(c));
                    //}
                    while (reader.Read())
                    {
                        T1 fea = new T1();
                        fea.Initiate(reader);
                        lfa.Add(fea);
                    }
                }
    

    La fonction Initialize lit les champs depuis le reader et les place dans les champs de fea.

    Une fois que c'est fait :

                grdFacturesListe.DataSource = lfl.ToList();
    

    Avec la DataGridView ça a marché (là je dois vérifier ce qui se passe avec un problème de violation de contrainte qui dégrade les performances), avec la ListBox pas terrible, enfin bref ça donne ce que j'ai expliqué.

    jeudi 14 décembre 2017 15:54
  • J'ai été un peu confus, hier.

    A présent que la DataGridView se charge proprement, voici avec quel code :

                NpgsqlDataAdapter dataAdapter = new NpgsqlDataAdapter(
                    strSql, 
                    AccesBase.getConnectionString());
    
                dsListeFactures1.DataTable1.Clear();
                try
                {
                    dataAdapter.Fill(dsListeFactures1.DataTable1);
                }

    En fait, c'est à BindingSource qu'on peut passer List<>.ToList(), pour le passer ensuite par exemple à un BindingNavigator.

    Je viens de relire la page sur ListBox.DataMember, j'ai l'impression que là-dessus, pour la première propriété listée, c'est DataSource, qu'on voulait mentionner. Après on a DataMember, hérité de ListControl, qui pourrait bien être à sa place.

    Je vais continuer à chercher un peu, ça serait sympathique de trouver un exemple.


    • Modifié Gloops jeudi 21 décembre 2017 13:06
    vendredi 15 décembre 2017 15:37
  • Probablement y aurait-il encore à développer, en attendant j'ai l'impression que ceci pourrait constituer une bonne conclusion :

    https://docs.microsoft.com/en-us/dotnet/framework/winforms/data-sources-supported-by-windows-forms

    Pour ne retenir qu'une phrase là-dedans, les contrôles Windows Forms liés aux données peuvent s'appuyer d'un objet dérivé de IList ou IListSource, ou encore si on passe par un BindingSource, sur un objet dérivé de IEnumerable.


    • Modifié Gloops jeudi 21 décembre 2017 13:36
    jeudi 21 décembre 2017 13:34