none
Combobox multi colonnes en C# RRS feed

  • Discussion générale

  • Vous ne pouvez pas voter pour votre propre billet.                    
                

    Bonjour,

    Je cherche à faire un Combobox multi colonnes à partir d'un DataSource.

    Impossible de trouvez une réponse sur internet.

    Voici la sous fonction qui charge ma Combobox :

    publicstaticvoidFnc_ChargeComboProfilsutilisateurs(ComboBox cb)

            {

                DataTable dt =

    newDataTable();

                dt.Columns.Add(

    "Libellé", typeof(string));

                dt.Columns.Add(

    "Id", typeof(string));

               

    stringsql = "select Id,Libellé,AdministrateurTotal from ProfilsUtilisateurs order by Libellé";

                SqlCommand com =

    newSqlCommand(sql, Cls_Fonctions.Glb_Base);

                SqlDataReader reader = com.ExecuteReader();

               

    if(reader.HasRows)

                   

    while(reader.Read())

                    {

                        DataRow rw = dt.NewRow();

                        rw[

    "Libellé"] = reader["Libellé"].ToString();

                        rw[

    "Id"] = reader["Id"].ToString();

                        dt.Rows.Add(rw);

                    }

                reader.Close();

                cb.DataSource = dt;

                cb.DisplayMember =

    "Libellé";

                cb.ValueMember =

    "Id";

                cb.SelectedIndex = -1;

            }

    Dans cet exemple, je cherche à afficher une seconde colonne AdministrateurTotal.

    Merci par avance de votre aide.

    jeudi 22 février 2018 11:54

Toutes les réponses

  • Bonjour Laurent,

    D’après ces threads, vous pouvez implémenter une classe dérivée de ComboBox:
    Need MultiColumn ComboBox in C# Windows
    Ultimate MultiColumn ComboBox Sample?

    Sinon, l’autre option est de concaténer les deux colonnes comme suit :

    public static void Fnc_ChargeComboProfilsutilisateurs(ComboBox cb)
            {
                DataTable dt = newDataTable();
                dt.Columns.Add("Valeurconcaténée", typeof(string));
                dt.Columns.Add("Id", typeof(string));
                string sql = "select Id, Libellé + ' ' + AdministrateurTotal AS Valeurconcaténée from ProfilsUtilisateurs order by Valeurconcaténée";
                SqlCommand com = newSqlCommand(sql, Cls_Fonctions.Glb_Base);
                SqlDataReader reader = com.ExecuteReader();
                if(reader.HasRows)
                while(reader.Read())
                {
                        DataRow rw = dt.NewRow();
                        rw["Valeurconcaténée"] = reader["Valeurconcaténée"].ToString();
                        rw["Id"] = reader["Id"].ToString();
                        dt.Rows.Add(rw);
                }
                reader.Close();
                cb.DataSource = dt;
                cb.DisplayMember = "Valeurconcaténée";
                cb.ValueMember = "Id";
                cb.SelectedIndex = -1;
            }

    Cordialement,
    Dimitar

    vendredi 23 février 2018 11:48
    Modérateur
  • Je ne veux surtout pas concaténer les champs. C'est trop facile et pas marrant.

    En fait c'est un problème de présentation et surtout, dans mon cas, de récupération de colonnes sélectionnées.

    vendredi 23 février 2018 15:48
  • Bonjour,

    Avez-vous une idée ?

    Comme expliqué, cela ne met pas possible de faire de la concaténation.

    J'ai bien vu des exemples sur le NET mais pas d'exemples qui fonctionnent.

    mercredi 7 mars 2018 15:33
  • Bonjour, vous avez un tuto et la possibilité de télécharger la dll ici

    • Modifié SquallFF8 vendredi 9 mars 2018 11:26
    vendredi 9 mars 2018 09:50
  • Attention c'est du VB et non du C#.

    Les exemples en VB se plantent.

    N'y a t-il pas un moyen sans passer par une DLL externe ?

    vendredi 9 mars 2018 16:34
  • Le VB.NET, tout comme C# font tous les 2 appels à la même technologie qui est le .NET

    De ce fait, si vous trouvez du code rédigez en VB.NET, vous pouvez toujours le traduire en C#, les DLL sont également compatibles dans les 2 langages.

    dimanche 11 mars 2018 16:22
  • Oui mais comme indiqué, si vous prenez les exemples fournis en VB, il est impossible de les charger sous Visual Studio.
    mardi 13 mars 2018 09:56
  • Je ne fais pas de C# mais du VB.NET, et importer une librairie .NET sous VS2010 fonctionne très bien, quelle est votre version de VS?
    mardi 13 mars 2018 10:21
  • En fait et comme je l'ai indiqué, je cherche du multi colonne avec le contrôle ComboBox.

    La bibliothèque indiquée n'est pas une combobox.

    mardi 13 mars 2018 18:25
  • L'exemple de MS CSWinFormMultipleColumnComboBox

    fonctionne très bien chez moi (VS 2015, Windows 10)


    mercredi 14 mars 2018 09:57
  • La bibliothèque indiquée n'est pas une combobox.

    Titre de la page: Using Multi Column Comboboxes in VB.NET

    Nom du fichier à télécharger : MultiColumnComboBox.zip

    Donc oui, le lien est une dll pour le champ combobox

    mercredi 14 mars 2018 13:36
  • Comme déjà évoqué, je ne peux charger les exemples dans VS2017.
    mercredi 21 mars 2018 15:50
  • Comme déjà évoqué, je ne peux charger les exemples dans VS2017.

    ???

    CSWinFormMultipleColumnComboBox est du C#, donc n'importe quelle version de VS les compile...


    mercredi 21 mars 2018 16:11
  • Avec VS2017, vous devriez pouvoir importer la librairie sans problème
    mercredi 21 mars 2018 16:37
  • Sauf erreur de ma part.Le dernier site cité ne donne pas d'information.
    samedi 24 mars 2018 20:18
  • CSWinFormMultipleColumnComboBox

    fonctionne parfaitement

    dimanche 25 mars 2018 07:41
  • En lançant l'application test via le lien que j'avais trouvé, la combo est bien une combo table

    mardi 27 mars 2018 07:25
  • Bonjour,

    Je n'ai pas su télécharger le projet, mais après avoir créé un formulaire Winform avec une comboBox, j'ai pu faire tourner ça en copiant le code de MainForm_Load().

    ça affiche la partie développée de la comboBox.

    La partie repliée affiche le type qui lui a été passé. Pour afficher le nom de l'enregistrement sélectionné, il manque deux lignes, qui ont dû être fournies dans la boîte de dialogue de propriétés :

    comboBox1.DisplayMember = "Name";
    comboBox1.ValueMember = "ID";
    

    Il ne reste plus qu'à traduire ça en VB.Net, je crois qu'il existe des moulinettes en ligne pour ça.

    Finalement, ça n'a pas l'air plus long à développer qu'une ListView.

    A tout hasard, pour récupérer la valeur sélectionnée :

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { int i = 0; if (int.TryParse(comboBox1.SelectedValue.ToString(), out i))

    // éviter d'afficher quelque chose avant d'avoir sélectionné { MessageBox.Show(comboBox1.SelectedValue.ToString()); } }


    lundi 2 avril 2018 17:50
  • Je me demande si c'est facile d'aligner la première colonne à droite ...

    lundi 2 avril 2018 17:56
  • Quelque chose qui peut facilement passer inaperçu est le lien en bas de la page vers un fil de discussion qui fournit une FAQ.

    lundi 2 avril 2018 18:14
  • Je me demande si c'est facile d'aligner la première colonne à droite ...

    La question en fait c'est de trouver plus élégant que ça :

    r1.Width /= 4;
    
    // ?????????
    using (SolidBrush sb = new SolidBrush(args.ForeColor))
    {
    	args.Graphics.DrawString(id.ToString().PadLeft(7), args.Font, sb, r1);
    }

    En l'état, avec un nombre variable de chiffres pour l'identifiant, pour que ça soit aligné à droite il faut une police à espacement fixe.

    Autre présentation


    • Modifié Gloops lundi 2 avril 2018 19:13
    lundi 2 avril 2018 19:08