CheckedListBox & Requête SQL

Résolu
Dedel209 Messages postés 29 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 14 août 2014 - 25 mai 2013 à 18:00
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 - 28 mai 2013 à 12:15
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

Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
28 mai 2013 à 12:15
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
3
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
25 mai 2013 à 21:25
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
0
Dedel209 Messages postés 29 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 14 août 2014
28 mai 2013 à 12:01
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.
0
Rejoignez-nous