Combobox à colonnes multiples

Résolu
Gaedarr Messages postés 49 Date d'inscription lundi 4 février 2013 Statut Membre Dernière intervention 12 mars 2015 - 2 avril 2012 à 09:10
Gaedarr Messages postés 49 Date d'inscription lundi 4 février 2013 Statut Membre Dernière intervention 12 mars 2015 - 3 avril 2012 à 10:42
Bonjour,

Cela fait un moment que je fais des recherche, mais rien de concluant pour le moment.

Je recherche à concaténer deux champs de mon tableau et à l'afficher via le displaymember.

Voici une partie de mon code :

                #region Remplissage de la combobox anciennes rubriques

                string strCommande = "SELECT DISTINCT `Trimestre`,`Annee` FROM `rubriques` WHERE `rubriques`.`Key` !=0";
                CommandeSQL.RemplissageAnciennesRubriques(strCommande, DS_Remplissage);

                cbbRubriques.DataSource = DS_Remplissage;
                cbbRubriques.DisplayMember = "Concat";
                cbbRubriques.ValueMember = "Key";
                cbbRubriques.Refresh();

                #endregion


Et la méthode RemplissageAnciennesRubriques :

public DataSet RemplissageAnciennesRubriques(string chaine_commande, DataSet DS_Remplissage)
        {
            try
            {
                //string chaine_commande = "SELECT DISTINCT `Trimestre`,`Annee` FROM `rubriques` WHERE `rubriques`.`Key` !=0";

                maSelectCommand.SelectCommand = new MySqlCommand(chaine_commande, ConnectionRessource);
                DS_Remplissage.Clear();
                DS_Remplissage.Tables.Add("Trimestre");
                DS_Remplissage.Tables.Add("Annee");
                maSelectCommand.Fill(DS_Remplissage.Tables[0]);
                maSelectCommand.Fill(DS_Remplissage.Tables[1]);

                DS_Remplissage.Tables.Add("Concat");
                DS_Remplissage.Tables["Concat"].Columns.Add("Periode");
                DS_Remplissage.Tables["Concat"].Columns["Periode"].Expression = DS_Remplissage.Tables["Trimestre"].ToString() + ", "
                                                                              + DS_Remplissage.Tables["Annee"].ToString();

                return DS_Remplissage;
            }
            catch
            {
                return DS_Remplissage; // vous en faites pas, c'est normal :p lol
            }
        }


Je pense que mon soucis vient du .expression, mais je ne vois pas vraiment.

Je n'ai pas pratiqué le C# depuis longtemps, si quelqu'un pouvait me raffraichir la mémoire, éclairer ma lanterne et surtout corriger mes erreurs, je lui en serais très reconnaissant ^^'



Cordialement, Gaedarr.
A voir également:

11 réponses

Tupad Messages postés 239 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 27 août 2012 5
2 avril 2012 à 10:24
Une remarque: Tu devrais renommer ton champ Key car c'est un mot réservé sur la plupart des BDD.
Voici le code réarrangé:

#region Remplissage de la combobox anciennes rubriques
string strCommande = "SELECT DISTINCT Key, Trimestre + ' ' + Annee FROM rubriques WHERE rubriques.[Key] !=0";
List<OldSection> list = CommandeSQL.RemplissageAnciennesRubriques(strCommande);

cbbRubriques.DisplayMember = "Value";
cbbRubriques.ValueMember = "Key";
cbbRubriques.DataSource = list;
cbb.Refresh();
#endregion


public class OldSection
{
public string Value { get; set; }
public int Key { get; set; }
}


public List<OldSection> RemplissageAnciennesRubriques(string chaine_commande)
{
List<OldSection> list = new List<OldSection>();
    try
    {
        SqlCommand cmd = new SqlCommand(chaine_commande, ConnectionRessource);
SqlDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
list.Add(new OldSection () { Key reader.GetInt(0), Valuereader.GetString(1)});
}

reader.Dispose(); reader = null;
cmd.Dispose(); cmd = null;            
}
            catch
            {            
// Log ton exception, c'est toujours utile
}
return list;
        }
3
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
2 avril 2012 à 18:28
Bonjour, en poussant un peu l'idée de Tupad:

public class OldSection
{
public string Value { get; set; }
public int Key { get; set; }
public string TexteAAfficher//propiété affectée au datamenber
   {
      return string.format("La valeur est {0}, la clé est {1}",Value, Key);
   }
}


Whismeril
3
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
3 avril 2012 à 09:30
Salut,

la concaténation sur MySQL ne se fait pas via l'opérateur '+', mais avec la fonction CONCAT(VARCHAR, VARCHAR [, VARCHAR, [..]])
3
Tupad Messages postés 239 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 27 août 2012 5
2 avril 2012 à 09:40
Tu as besoin de réutiliser ton DS_remplissage avec ces données par la suite, parce que sinon, tu récupères beaucoup de données pour rien?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gaedarr Messages postés 49 Date d'inscription lundi 4 février 2013 Statut Membre Dernière intervention 12 mars 2015
2 avril 2012 à 09:53
Oui, je réutilise ce DS_remplissage, mais à la limiste, je peux faire une autre méthode.

Si tu as une idée pour récupérer au moins les trimestres et les années puis de les concaténer, alors ce serait déjà pas mal :)

Je cherche à afficher ces deux champs dans la combobox via le displaymember, mais vu qu'il ne prend qu'un seul argument, je suis un peu coincé.





Cordialement, Gaedarr.
0
Gaedarr Messages postés 49 Date d'inscription lundi 4 février 2013 Statut Membre Dernière intervention 12 mars 2015
2 avril 2012 à 10:39
Je vais voir pour implémenter tout ça, je te tiens au courant, merci :)




Cordialement, Gaedarr.
0
Gaedarr Messages postés 49 Date d'inscription lundi 4 février 2013 Statut Membre Dernière intervention 12 mars 2015
3 avril 2012 à 08:12
Bonjour,

N'ayant pas vraiment eu le temps de coder hier, j'en profite aujourd'hui, je vous donnerai des nouvelles dès que possible.

Merci pour votre aide.





Cordialement, Gaedarr.
0
Gaedarr Messages postés 49 Date d'inscription lundi 4 février 2013 Statut Membre Dernière intervention 12 mars 2015
3 avril 2012 à 09:06
Alors en faisant Trimestre + ' ' + Annee, ça fait simplement une addition des deux, j'ai le premier trimestre par exemple en 2012 et il me ressort un 2013. Ce qu'il me faudrait, c'est un affichage genre "1er, 2012" pour premier trimestre 2012 en bref.

j'ai tenté de faire le select sans sélectionner la clef primaire mais uniquement trimestre et années, mais là, l'année est juste sauf qu'il n'y a pas de trimestre.

Je ne vois pas trop comment concaténer directement en spécifiant la chaine de commande.

Une tite idée ?





Cordialement, Gaedarr.
0
Tupad Messages postés 239 Date d'inscription lundi 5 décembre 2005 Statut Membre Dernière intervention 27 août 2012 5
3 avril 2012 à 09:35
Tu sais me donner une idée du contenu de ta table et des types des champs que tu récupères?
0
Gaedarr Messages postés 49 Date d'inscription lundi 4 février 2013 Statut Membre Dernière intervention 12 mars 2015
3 avril 2012 à 09:56
Ok,

Donc ça donnerait quelque chose comme

SELECT DISTINCT CONCAT_WS(' ',Trimestre,Annee) as Periode FROM `rubriques` WHERE `rubriques`.`ID_rubriques` !=0;

Et donc pour le displaymember, je suppose que de lui indiquer Periode devrait fonctionner ?







Cordialement, Gaedarr.
0
Gaedarr Messages postés 49 Date d'inscription lundi 4 février 2013 Statut Membre Dernière intervention 12 mars 2015
3 avril 2012 à 10:42
En fait je récupère deux champs précisément. L'un est le trimestre donc un int et l'autre est un champ année que j'ai laissé en int pour avoir uniquement l'année.

Mais vos codes fonctionnent très bien maintenant que j'ai pu les mettre en place, j'avais besoin de récupérer le trimestre, puis l'année et de les afficher les deux dans la combobox via le displaymember, mais je dois dire que sans le concat, ça aurait été un peu plus corsé :)

Donc maintenant, voici en gros le code que j'ai et qui fonctionne pour ce que je recherche :

Remplissage de la combobox
#region Remplissage de la combobox anciennes rubriques

                string strCommande = "SELECT DISTINCT CONCAT_WS(' ',Trimestre,Annee) as Periode FROM `rubriques` WHERE `rubriques`.`ID_rubriques` !=0";
                
                List<OldSection> list = CommandeSQL.RemplissageAnciennesRubriques(strCommande);

                cbbRubriques.DisplayMember = "Value";
                cbbRubriques.ValueMember = "Key";
                cbbRubriques.DataSource = list;
                cbbRubriques.Refresh();

                #endregion


Suivi de
public List<OldSection> RemplissageAnciennesRubriques(string chaine_commande)
        {
            List<OldSection> list = new List<OldSection>();
            try
            {
                MySqlCommand cmd = new MySqlCommand(chaine_commande, ConnectionRessource);
                MySqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    list.Add(new OldSection() { Value = reader.GetString(0) });
                }

                reader.Dispose(); reader = null;
                cmd.Dispose(); cmd = null;
            }
            catch(MySqlException myEx)
            {
                // Log ton exception, c'est toujours utile
                MessageBox.Show(myEx.ToString(),"Erreur Sql");
            }
            return list;
        }


Une tite classe à part
class OldSection
    {
        public string Value { get; set; }
        public int Key { get; set; }
    }



Et pour l'instant tout fonctionne très bien, la combobox affiche bien 1 2012 pour le premier trimestre de 2012 :)

Merci pour votre aide, vous m'avez bien rendu service ^^

Cordialement, Gaedarr.
0
Rejoignez-nous