CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C# + SQL]Ma listbox me troll a l'aide

Zialocks
Zialocks
Niveau 61
26 octobre 2021 à 18:58:09

Et re bonjour le forum info

Contexte : Quand j'appuie sur un magazine le programme parcours intérieurement parcours une liste d'articles puis ça parcours chaque article pour trouver les pigistes qui s'y trouvent (foreach=>foreach en gros)
Puis pour chaque pigiste j'utilise une requête SQL pour calculer un total entre 2 colonnes de la bdd
Résultat attendu : La listebox à la fin m'affiche le nom du pigiste et le dit total

Résultat obtenu : N'affiche rien + aucun message d'erreur donc impossible d'avoir une idée de quoi changer

Voila les morceaux de code (dans l'ordre : SQL > xaml.cs>Classe total pigiste)

public List<TotalPigiste> getTotalPigiste(int idMag,string nomPig)
        {
            List<TotalPigiste> lesPigistes = new List<TotalPigiste>();
            cmd = new MySqlCommand("SELECT nomPigiste,SUM(nbFeuillet*prixFeuillet) FROM pigiste INNER JOIN article ON pigiste.numPigiste = article.numPig WHERE idMag = '"+idMag+"' and nomPigiste = '"+nomPig+"'" , cnx);
            dr = cmd.ExecuteReader();
            dr.Read();
            while (dr.Read())
            {
                TotalPigiste unNouveauPigiste = new TotalPigiste((dr[0].ToString()), Convert.ToDouble(dr[1].ToString()));
                lesPigistes.Add(unNouveauPigiste);

            }
            dr.Close();
            return lesPigistes;
        }
private void lstMagazines_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            
            if(lstMagazines.SelectedItem!=null)
            {
                var gst = new GstBddMag.GstBddMag();
                lstArticles.ItemsSource = gst.getAllArticlesByMagazine((lstMagazines.SelectedItem as Magazine).NumMagazine);
                txtMontantMagazine.Text = gst.getMontantMagazine((lstMagazines.SelectedItem as Magazine).NumMagazine).ToString();
                foreach (Article art in gst.getAllArticlesByMagazine((lstMagazines.SelectedItem as Magazine).NumMagazine))
                {

                    List<Pigiste> lesPigistes = new List<Pigiste>();
                    lesPigistes.Add(art.LePigiste);
                    foreach (Pigiste p in lesPigistes)
                    {
                        lstTotalPigiste.ItemsSource = gst.getTotalPigiste((lstMagazines.SelectedItem as Magazine).NumMagazine, p.NomPigiste);
                    }

                }
            }
        }
public class TotalPigiste
    {
        private string nomPigiste;
        private double total;

        public TotalPigiste(string unNom, double unTotal)
        {
            NomPigiste = unNom;
            Total = unTotal;
        }

        public string NomPigiste { get => nomPigiste; set => nomPigiste = value; }
        public double Total { get => total; set => total = value; }
    }

<ListBox Name="lstTotalPigiste" Grid.Row="6" Grid.Column="2"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding NomPigiste}" Width="150"></TextBlock> <TextBlock Text="{Binding Total}" Width="100"></TextBlock> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> Binding de la listBox

Cimer les kheys

boucif
boucif
Niveau 24
26 octobre 2021 à 22:19:27

J'ai pas tout check mais pourquoi dans ton retour de requête tu fais un premier read dont tu récupères pas le résultat supprime le,
En plus la prochaine fois écrit une requête paramétré et utilise un using pour close la connection

Message édité le 26 octobre 2021 à 22:22:32 par boucif
Zialocks
Zialocks
Niveau 61
27 octobre 2021 à 18:24:10

Le 26 octobre 2021 à 22:19:27 :
J'ai pas tout check mais pourquoi dans ton retour de requête tu fais un premier read dont tu récupères pas le résultat supprime le,
En plus la prochaine fois écrit une requête paramétré et utilise un using pour close la connection

Mais si je read pas,je peux pas récupérer les données ? non?

boucif
boucif
Niveau 24
28 octobre 2021 à 09:33:50

Le 27 octobre 2021 à 18:24:10 :

Le 26 octobre 2021 à 22:19:27 :
J'ai pas tout check mais pourquoi dans ton retour de requête tu fais un premier read dont tu récupères pas le résultat supprime le,
En plus la prochaine fois écrit une requête paramétré et utilise un using pour close la connection

Mais si je read pas,je peux pas récupérer les données ? non?

En faite tu fais un premier read qui t'emmène à la ligne suivante donc tu récupères que les données à partir de la ligne 2

dr.Read();

while (dr.Read())
{
TotalPigiste unNouveauPigiste = new TotalPigiste((dr[0].ToString()), Convert.ToDouble(dr[1].ToString()));
lesPigistes.Add(unNouveauPigiste);

}
dr.Close();

Faut que tu vires ce premier dr.read et que tu utilises que ton while

Zialocks
Zialocks
Niveau 61
28 octobre 2021 à 22:34:56

C'est bon vdd ça a marché mais pas tout a fait

J'ai enfin des valeurs qui s'affichent (merci a toi pour ça)
MAIS un nouveau blem,ca s'arrête au 1er résultat

Exemple : J'ai 2 pigiste dans un article,ça affiche le total pour un seul pigiste seulement

La commande sql est niquel ,c'est 100% un problème de boucle mais ou?

boucif
boucif
Niveau 24
30 octobre 2021 à 20:02:40

tu sais utiliser les espions dans Visual Studio essayes de voir déjà si ça te renvoie bien 2 résultats ta méthode getTotalPigistes

Zialocks
Zialocks
Niveau 61
02 novembre 2021 à 22:58:34

Le 30 octobre 2021 à 20:02:40 :
tu sais utiliser les espions dans Visual Studio essayes de voir déjà si ça te renvoie bien 2 résultats ta méthode getTotalPigistes

Up
Ça y est devoir terminé

Au cas ou ça aiderait d'autres dans mon cas

-> Instancier la liste au début de la fonction et pas dans la boucle (bah oui si la liste se recrée dans la boucle a chaque article,ya rien qui entre, jsuis debile)

Puis j'ai eu un soucis de distinction,vu qu'il ya parfois plusieurs pigistes dans le même magazine (Par exemple si pour les articles 1 a 4 ya les pigistes A B B A ça affiche les 4 au lieu de A et B seulement)

Pour y remédier => créer un clone de la liste des pigistes mais en distinct

https://docs.microsoft.com/fr-fr/dotnet/api/system.linq.enumerable.distinct?view=net-5.0

Bon bah ce ptit exercice m'aura appris qq fonctions et des ptites étourderies à pas refaire :hap:

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment