IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Problème de variable


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 44
    Points : 34
    Points
    34
    Par défaut Problème de variable
    Bonjour, je sollicite votre aide d'urgence car j'ai un problème dans mon code, j'aimerais afficher dans un dataGrid tous les produits associés à un fournisseur, mais le rendu n'est pas celui que je veux, car ça me sort TOUS les produits de TOUS les fournisseurs. Dans ce cas, il faut que je déclare "nomFournisseur" qui correspond à getNomFournisseur, mais lorsque j'essaie d'initialiser ma variable, il y a un conflit avec la ligne qui est dans mon foreach
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string nomFournisseur = resLigne["nomFournisseur"].ToString();
    Voici ma fonction en intégralité de ma passerelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
            //fonction permettant de récupérer tous les produits d'un fournisseurs
            public static List<Produit> getLesProduitsByNom()
            {
                List<Produit> maListe = new List<Produit>();
                Produit unObjFournisseur = null;
                if (ClassReq.RetConnOk() == true)
                {
                    ClassReq afficherClasse = new ClassReq("SELECT * FROM PRODUIT WHERE nomFournisseur = '"+ nomFournisseur +"'"); // creer une nouvelle requete
                    DataTable resultat = new DataTable();
                    resultat = afficherClasse.ExecuteSelect(); // recupere le resultat de la requete
                    foreach (DataRow resLigne in resultat.Rows)
                    {
                        string referenceProd = resLigne["referenceProd"].ToString();
                        string libelleProduit = resLigne["libelleProduit"].ToString();
                        double prixUHT = Double.Parse(resLigne["prixUHT"].ToString());
                        double tauxTVA = Double.Parse(resLigne["tauxTVA"].ToString());
                        int seuilReapro = Int32.Parse(resLigne["seuilReapro"].ToString());
                        int delaiReapro = Int32.Parse(resLigne["delaiReapro"].ToString());
                        int stockTemp = Int32.Parse(resLigne["stockTemp"].ToString());
                        string origineProduit = resLigne["origineProduit"].ToString();
                        string couleurProduit = resLigne["couleurProduit"].ToString();
                        string tailleProduit = resLigne["tailleProduit"].ToString();
                        int stockTheorique = Int32.Parse(resLigne["stockTheorique"].ToString());
                        int numFournisseur = Int32.Parse(resLigne["numFournisseur"].ToString());
                        int numCategorie = Int32.Parse(resLigne["numCategorie"].ToString());
                        string numReduction = resLigne["numReduction"].ToString();
                        string nomFournisseur = resLigne["nomFournisseur"].ToString();
                        unObjFournisseur = new Produit(referenceProd, libelleProduit, prixUHT, stockTheorique, tauxTVA, stockTemp, couleurProduit, tailleProduit, origineProduit, delaiReapro, seuilReapro, nomFournisseur);
                        maListe.Add(unObjFournisseur);
                    }
                }
                return maListe;
            }
    Et voici le code de mon formulaire affichant le datagrid :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    using ClassLibraryL3B;
    using les3belges;
    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using System.Collections;
    using gestionPriseCommande;
    using System.Linq;
     
    namespace gestionPriseCommande
    {
     
        public partial class FormProduitFournisseur : Form
        {
     
        public FormProduitFournisseur()
            {
                InitializeComponent();
            }
     
            private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
            {
     
            }
     
            private void button3_Click(object sender, EventArgs e)
            {
     
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                this.Close();
            }
     
            private void FormProduitFournisseur_Load(object sender, EventArgs e)
            {
                List<Fournisseur> maListe = Passerelle.getLesFournisseursByNom();
     
                foreach (Fournisseur unFour in maListe)
                {
                    comboBox2.Items.Add(unFour.getNomFournisseur());
                }
            }
     
            private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
            {
                dataGridView1.Visible = true;
                string unNomFournisseur = comboBox2.Text;
                List<Produit> lesProduits = Passerelle.getLesProduitsByNom();
                foreach (Produit unProd in lesProduits)
                {
                    string[] ligne = { unProd.getReference(), unProd.getLibelleProduit(), unProd.getPrixUHTProduit().ToString(), unProd.getStockTheorique().ToString(), unProd.getTauxTVA().ToString(), unProd.getStockTemp().ToString(), unProd.getCouleurProduit(),unProd.getTailleProduit(), unProd.getOrigineProduit(), unProd.getDelaiReapro().ToString(),unProd.getSeuilReapro().ToString()};
                    dataGridView1.Rows.Add(ligne);
                }
     
     
     
            }
        }
    }
    Voilà ce que le datagrid me renvoie ( tous les produits de tous les fournisseurs ), à la place de tous les produits du fournisseur selectionné dans le comboBox Nom : CaptureDatagridNoOp.PNG
Affichages : 92
Taille : 54,5 Ko

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static List<Produit> getLesProduitsByNom()
    La fonction s'appelle getLesProduitsByNom et pourtant n'attend pas de nom en paramètres (Je voulais t'en parler hier mais à chaque jour suffit sa peine ;-))
    Les variables globales sont à proscrire ! Le programme deviendra très vite inmaintenable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static List<Produit> getLesProduitsByNom(String NomFournisseur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
    {
        dataGridView1.Visible = true;
        string unNomFournisseur = comboBox2.Text;
        List<Produit> lesProduits = Passerelle.getLesProduitsByNom(unNomFournisseur);
        foreach (Produit unProd in lesProduits)
        {
            string[] ligne = { unProd.getReference(), unProd.getLibelleProduit(), unProd.getPrixUHTProduit().ToString(), unProd.getStockTheorique().ToString(), unProd.getTauxTVA().ToString(), unProd.getStockTemp().ToString(), unProd.getCouleurProduit(),unProd.getTailleProduit(), unProd.getOrigineProduit(), unProd.getDelaiReapro().ToString(),unProd.getSeuilReapro().ToString()};
            dataGridView1.Rows.Add(ligne);
        }
    }
    Pour info, renomme tous tes controls car ComboBox2 et dataGridView1 ce n'est pas parlant et tu va finir par t'y perdre.

    De plus je ne sais pas comment est implémentée ta classe ClassReq mais la concaténation de chaines dans une requêtes SQL est aussi à proscrire (voir l'injection SQL).

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Bonjour,

    J'ai une question un string en taille XXXXXXXS, c'est un string pampers ?
    En tout cas merci, m'a bien fait marrer , bon c'est vrai je suis bon public !

    Sinon pour que mon intervention ne soit pas complétement inutile, suis les conseil de ebastien, et je rajouterais que perso j'essaye d'éradiquer complétement les static. Au pire je passe par un singleton, bon ok il faut un static pour faire un singleton... mais disont que je n'écris jamais , ils m'ont trop fais souffrir par la passé.

    Pour la requête, oui il ne faut jamais faire de requete concat ... c'est le mal absolue !
    Par contre tu t'ai fait une classe pour tes requêtes, du coup tu pourras facilement changer sont fonctionnement (ou l'enrichir), et utiliser des requêtes paramétrées et par exemple prendre en paramétre l'ordre sql avec des @ pour tes variables, et un paramètre avec la liste des valeurs...

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 44
    Points : 34
    Points
    34
    Par défaut
    Merci de votre aide, n'ayant pas accès à internet avant j'ai du me débrouiller pour trouver les réponses tout seul, bref tout fonctionne correctement désormais, mis à part un petit bug :
    lorsque je sélectionne un fournisseur A dans mon comboBox, les produits associés à celui-ci s'affichent dans le dataGrid, mais lorsque je sélectionne un autre fournisseur B, et bien les produits du fournisseur A restent dans le dataGrid, et les produits du fournisseur B s'ajoutent aux produits du fournisseur A, ce qui créé une sorte de boucle infinie, or je souhaiterais que lorsque je sélectionne un autre fournisseur, qu'il n'y est que les produits associés au fournisseur sélectionné actuellement qui apparaissent, et non les produits de tous les fournisseurs sélectionnés avant + le fournisseur sélectionné actuel. Je ne sais pas si vous m'avez compris, en tout cas j'espère que vous pourrez m'aider, merci d'avance
    Code formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    using ClassLibraryL3B;
    using les3belges;
    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using System.Collections;
    using gestionPriseCommande;
    using System.Linq;
     
    namespace gestionPriseCommande
    {
     
        public partial class FormProduitFournisseur : Form
        {
     
        public FormProduitFournisseur()
            {
                InitializeComponent();
            }
     
     
     
            private void button1_Click(object sender, EventArgs e)
            {
                this.Close();
            }
     
            private void FormProduitFournisseur_Load(object sender, EventArgs e)
            {
                List<Fournisseur> maListe = Passerelle.getLesFournisseursByNom();
     
                foreach (Fournisseur unFour in maListe)
                {
                    comboBox2.Items.Add(unFour.getNomFournisseur());
                }
            }
     
            private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
            {
                dataGridView1.Visible = true;
                string unNomFournisseur = comboBox2.Text;
                List<Produit> lesProduits = Passerelle.getLesProduitsByNom(unNomFournisseur);
                foreach (Produit unProd in lesProduits)
                {
                    string[] ligne = { unProd.getReference(), unProd.getLibelleProduit(), unProd.getPrixUHTProduit().ToString(), unProd.getStockTheorique().ToString(), unProd.getTauxTVA().ToString(), unProd.getStockTemp().ToString(), unProd.getCouleurProduit(),unProd.getTailleProduit(), unProd.getOrigineProduit(), unProd.getDelaiReapro().ToString(),unProd.getSeuilReapro().ToString()};
                    dataGridView1.Rows.Add(ligne);
                }
     
     
     
            }
        }
    }
    Bout du code passerelle avec la fonction getLesProduitsByNom(string unNomFournisseur) que j'utilise pour le dataGrid :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
            //fonction permettant de récupérer tous les produits des fournisseurs
            public static List<Produit> getLesProduitsByNom(string unNomFournisseur)
            {
                List<Produit> maListe = new List<Produit>();
                Produit unObjFournisseur = null;
                if (ClassReq.RetConnOk() == true)
                {
                    ClassReq afficherClasse = new ClassReq("SELECT * FROM PRODUIT WHERE nomFournisseur = '"+ unNomFournisseur +"'"); // creer une nouvelle requete
                    DataTable resultat = new DataTable();
                    resultat = afficherClasse.ExecuteSelect(); // recupere le resultat de la requete
                    foreach (DataRow resLigne in resultat.Rows)
                    {
                        string referenceProd = resLigne["referenceProd"].ToString();
                        string libelleProduit = resLigne["libelleProduit"].ToString();
                        double prixUHT = Double.Parse(resLigne["prixUHT"].ToString());
                        double tauxTVA = Double.Parse(resLigne["tauxTVA"].ToString());
                        int seuilReapro = Int32.Parse(resLigne["seuilReapro"].ToString());
                        int delaiReapro = Int32.Parse(resLigne["delaiReapro"].ToString());
                        int stockTemp = Int32.Parse(resLigne["stockTemp"].ToString());
                        string origineProduit = resLigne["origineProduit"].ToString();
                        string couleurProduit = resLigne["couleurProduit"].ToString();
                        string tailleProduit = resLigne["tailleProduit"].ToString();
                        int stockTheorique = Int32.Parse(resLigne["stockTheorique"].ToString());
                        int numFournisseur = Int32.Parse(resLigne["numFournisseur"].ToString());
                        int numCategorie = Int32.Parse(resLigne["numCategorie"].ToString());
                        string numReduction = resLigne["numReduction"].ToString();
                        string nomFournisseur = resLigne["nomFournisseur"].ToString();
                        unObjFournisseur = new Produit(referenceProd, libelleProduit, prixUHT, stockTheorique, tauxTVA, stockTemp, couleurProduit, tailleProduit, origineProduit, delaiReapro, seuilReapro, nomFournisseur);
                        maListe.Add(unObjFournisseur);
                    }
                }
                return maListe;
            }

  5. #5
    Membre confirmé
    Avatar de nouanda
    Homme Profil pro
    Hobbyist
    Inscrit en
    Mai 2002
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Activité : Hobbyist

    Informations forums :
    Inscription : Mai 2002
    Messages : 246
    Points : 627
    Points
    627
    Par défaut
    C'est à cause de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataGridView1.Rows.Add(ligne);
    Tu ne fais que rajouter des lignes à ce que contient déjà ton datagridview.

    Il faut que tu rajoutes un dataGridView1.Rows.Clear(); quelque part:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
            {
                dataGridView1.Rows.Clear();
                dataGridView1.Visible = true;
                string unNomFournisseur = comboBox2.Text;
                List<Produit> lesProduits = Passerelle.getLesProduitsByNom(unNomFournisseur);
                foreach (Produit unProd in lesProduits)
                {
                    string[] ligne = { unProd.getReference(), unProd.getLibelleProduit(), unProd.getPrixUHTProduit().ToString(), unProd.getStockTheorique().ToString(), unProd.getTauxTVA().ToString(), unProd.getStockTemp().ToString(), unProd.getCouleurProduit(),unProd.getTailleProduit(), unProd.getOrigineProduit(), unProd.getDelaiReapro().ToString(),unProd.getSeuilReapro().ToString()};
                    dataGridView1.Rows.Add(ligne);
                } 
            }
    " Entre le Savoir et le Pouvoir, il y a le Vouloir "

    Desole pour les accents, je suis en QWERTY...

Discussions similaires

  1. [VB.NET] Probléme de variable
    Par Silvia12 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 02/03/2005, 11h51
  2. [Debutant(e)]problème de variable d'environnement
    Par tolsam dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 12/08/2004, 19h08
  3. Problème de variable
    Par vp dans le forum Windows
    Réponses: 2
    Dernier message: 14/05/2004, 16h27
  4. [Débutant] Problème de variables
    Par bonnefr dans le forum SWT/JFace
    Réponses: 9
    Dernier message: 12/05/2004, 17h41
  5. [servlet]problème de variable jamais nulle
    Par omega dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 18/03/2004, 09h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo