CheckedListBox & Requête SQL [Résolu]

Signaler
Messages postés
29
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
14 août 2014
-
Messages postés
14482
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 juillet 2020
-
Bonsoir à tous,

Voici mon problème :

J'ai une checkedListBox contenu des cours, je récupère les champs cochés dans celle ci et je les place dans une liste.

List<string> listCours = new List<string>();

            for (int i = 0; i <= (checkedListBoxCours.CheckedItems.Count - 1); i++)
            {
                listCours.Add(checkedListBoxCours.CheckedItems[i].ToString());
            }

            


En fonction des cours récupérés je voudrais calculer la somme de ses cours pour obtenir un prix total
via la méthode SUM en sql.

Seulement je ne sais pas comment passé ma liste de cours récupérés à une requête sql...

Une idée?

Merci d'avance pour votre réponse.

3 réponses

Messages postés
14482
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 juillet 2020
420
La méthode que je t'ai proposée fonctionne quelque soit le nombre d'items selectionnés.

//Lecture de la base de donnée
List<MonCours> tousLesCours= new List<MonCours>();
//Ici le code pour se connecter lire les données et remplir la liste, je ne fait pas de db je te laisse faire

//une fois la liste remplie
checkedListBoxCours.datasource = tousLesCours;
//maintenant le checkedListBoxCours affiche la liste complléte des cours


//dans l'évèement click par exemple
int total= checkedListBoxCours .CheckedItems.Cast<MonCours>().Sum(c=> c.Prix)


Whismeril
Messages postés
14482
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 juillet 2020
420
Bonjour,

à ta place au lieu d'avoir une liste de string, je ferais une liste d'une classe ayant le nom du cours et le prix en tant que propriétés

class MonCours
{
    public string Nom {get; set;}

    public int Prix {get; set;}

    public override string ToString()
    {
       return string.Format("Ici j'affiche le nom:{0}", Nom);
    }

....
}


Ma checkedlisbox contiendrait la liste totale des cours en affichant le nom (avec la propriété DisplayMember ou en "overidant" le ToString de MonCours).

Quand tu crées la liste de cours cochés:
List<MonCours> listCours = new List<MonCours>();

            for (int i = 0; i < checkedListBoxCours.CheckedItems.Count; i++)//< est plus simple à utiliser que <=,et d'ailleurs dans ce cas je préfère foreach
            {
                listCours.Add((MonCours)checkedListBoxCours.CheckedItems[i]);
            }


Ensuite il ne te reste qu'à faire la somme du prix grâce àLinq
int total = listCours.Sum(c=> c.Prix);//pas besoin de se torturer à intégrer du sql


J'ai tapé les codes de tête, il y a peut être quelques petites erreurs.

Sinon tu peux même faire tout ça en une seule ligne:
int mesTests = checkedListBox1.CheckedItems.Cast<ClassTest>().Sum(c=> c.Age);//le cast transforme la collection de CheckedItems en un Ienumerable de ClassTest, auquel je peux appliquer Sum

Whismeril
Messages postés
29
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
14 août 2014

Merci pour ta réponse.

J'ai effectué un test en sélectionnant 3 cours.

List<string> listCours = new List<string>();
 
            for (int i = 0; i <= (checkedListBoxCours.CheckedItems.Count - 1); i++)
            {
                listCours.Add(checkedListBoxCours.CheckedItems[i].ToString());
            }
 
            string un = listCours[0];
            string deux = listCours[1];
            string trois = listCours[2];
 
            DBConnect db = new DBConnect();
 
            textBoxCout.Text = db.CountFormations(un, deux, trois);


Je passe mes 3 cours à ma requête sql et je place le résultat dans une textbox. Ça fonctionne parfaitement.

Il me reste à trouver comment faire pour envoyer les cours sélectionné, pas uniquement les trois comme dans mon test.