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

Windows Forms Discussion :

DGV & co


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut DGV & co
    Bonjour, je viens aujourd'hui vous voir pour un problème bien plus complexe que le précédent.

    Je m'explique;

    J'affiche sur une ligne le résultat de la requete dans un datagridview. L'utilisateur rentre une valeur via une autre form (merci tomlev).Je fais le calcul des informations présentes dans la ligne (venant de la requete + ce que l'utilisateur à entrer) dans une autre colonne, même ligne.

    Tout cela fonctionne parfaitement à un point pret : la cellule où l'utilisateur rentrer la donnée et la cellule ou s'affiche le résultat sont toujours les mêmes !

    VOici mon code :

    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
     
     for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
                {
                        DataGridViewCheckBoxCell maCell = new DataGridViewCheckBoxCell();
                        maCell = (DataGridViewCheckBoxCell)dataGridView1.Rows[i].Cells[0];
     
                        if (maCell.FormattedValue.Equals(true))
                        {
                            #region Creation de la requete et affichage du Dataset (CIP)
     
                            string temp = dataGridView1.Rows[i].Cells[1].Value.ToString();
                            int temp2 = Int32.Parse(temp);
     
                            MySQLDriverCS.MySQLDataAdapter MyAdapter2 = new MySQLDriverCS.MySQLDataAdapter("SELECT produit.CODE_CIP_PRODUIT AS 'Code CIP Produit', produit.NOM_PRODUIT AS 'Nom', prix_achat_admin.PRIX AS 'Prix HT', produit.MONTANT_TVA AS 'TVA' FROM produit, prix_achat_admin WHERE produit.ID_PRODUIT=prix_achat_admin.ID_PRODUIT AND CODE_CIP_PRODUIT = " + temp2 + " AND prix_achat_admin.ID_TYPE_ACHAT = " + type_prix, conn2);
                            MyAdapter2.Fill(ds2, "produit");
     
                            dataGridView2.DataSource = ds2;
                            dataGridView2.DataMember = ds2.Tables[0].TableName;
                            #endregion
     
                            add_qte ad = new add_qte();
                            ad.ShowDialog();
     
                            valeur_quantite = ad.TexteSaisi;
     
                            dataGridView2.Rows[i].Cells[0].Value = (object)valeur_quantite;
     
                            valeur_HT = dataGridView2.Rows[i].Cells["PRIX HT"].Value.ToString();
                            valeur_HT = valeur_HT.Replace('.', ',');
     
                            valeur_TVA = dataGridView2.Rows[i].Cells["TVA"].Value.ToString();
                            valeur_TVA = valeur_TVA.Replace('.', ',');
     
                            valeur_HT_d = Convert.ToDouble(valeur_HT);
                            valeur_TVA_d = Convert.ToDouble(valeur_TVA);
                            valeur_quantite_d = Convert.ToDouble(valeur_quantite);
     
                            valeur_ligne_total_d = valeur_HT_d * valeur_quantite_d * valeur_TVA_d;
                            valeur_tot_TTC += valeur_ligne_total_d;
                            valeur_ligne_total = valeur_ligne_total_d.ToString();
     
                            dataGridView2.Rows[i].Cells[1].Value = (object)valeur_ligne_total;     // toutes taxes comprises   
     
                            valeur_ligne_total_d = valeur_HT_d * valeur_quantite_d;
                            valeur_tot_HT += valeur_ligne_total_d;
                        }
                        else
                        {
                        }
                }

    Je pense que l'erreur est du à Cells[0] ou Cells[1]. Je devrais surement créer une autre boucle dans la boucle pour faire un truc dans le genre :
    dataGridView2.Rows[i].Cells[j].Value


    Qu'en pensez vous ? Avez vous des pistes de solutions me permettant d'avancer dans mon souchis ?

    Voila je vous remercie

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Tu utilises le data binding pour remplir le DGV ? Dans ce cas, il vaudrait mieux que tu fasses les calculs directement sur la source de données (DataTable par exemple). C'est jamais une bonne idée de se baser sur des éléments de l'interface graphique dans le code métier...

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par tomlev Voir le message
    C'est jamais une bonne idée de se baser sur des éléments de l'interface graphique dans le code métier...
    +1
    Et mettre du code d'accés aux données dans le code de l'interface graphique, c'est pas une bonne idée non plus.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    erf, je n'utilise pas du tout cela. En quoi c'est une mauvaise chose ?
    Si vous voulez j'apprends petit à petit ce langage et je me rajoute des difficultés à chaque fois que je recommence à taffer dessus. Pour le moment je souhaiterai faire ca sous DGV.

    Mais si cela n'est vraiment pas réalisable, je le ferais d'une autre manière.
    En plus j'imagine qu'il doit avoir un tuto sur le site sur le databinding.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Pour ton problème, j'ai pas très bien compris ce que tu essaies de faire (ni quel est le problème), mais ça me semble bizarre de modifier dans une boucle la DataSource d'un contrôle... au final, ce sera les données correspondant à la dernière ligne traitée qui seront affichées dans dataGridView2 :S

    Citation Envoyé par Redg9 Voir le message
    erf, je n'utilise pas du tout cela. En quoi c'est une mauvaise chose ?
    Si tu veux écrire du code facilement réutilisable, il faut isoler au maximum les aspects "métier" des aspects "interface utilisateur". Si ton code métier utilise explicitement l'interface utilisateur, le couplage est total : ton code métier devient dépendent de l'interface utilisateur, et tu ne peux plus l'utiliser dans un autre contexte. Si tu remplaces le DGV par autre chose (un composant grille du commerce par exemple), tu es obligé de retravailler le code métier.


    Citation Envoyé par Redg9 Voir le message
    En plus j'imagine qu'il doit avoir un tuto sur le site sur le databinding.
    Indeed...
    http://dotnet.developpez.com/cours/liaisoncontroles/
    Il est pas très récent, mais les principes ont pas trop bougé. Notamment, il parle du DataGrid, et non du DataGridView, mais c'est assez similaire

    Au fait, dans ton code, "CIP", ça correspond à "Club Inter Pharmaceutique", non ? si c'est le cas, on est probablement concurrents

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    ahah excactement, sauf que je suis stagiaire, je créé un logiciel pour facilité la vie aux pharmaciens/discounter

    (maintenant jsens que tu vas me donner que des trucs pour me faire planter et me mélanger encore plus xDD)

    Pour mon problème, c'est ce que tu as dis : "au final, ce sera les données correspondant à la dernière ligne traitée qui seront affichées dans dataGridView2" et également celui la : le résultat de la ligne traitée se fait que sur une seule même cellule.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Redg9 Voir le message
    Pour mon problème, c'est ce que tu as dis : "au final, ce sera les données correspondant à la dernière ligne traitée qui seront affichées dans dataGridView2"
    Ben oui mais dans ce cas je vois pas bien ce que tu veux obtenir à la fin... de toutes façons j'ai pas trop compris ce que ton code était supposé faire

    Citation Envoyé par Redg9 Voir le message
    et également celui la : le résultat de la ligne traitée se fait que sur une seule même cellule.
    Je comprends pas ce que tu veux dire par là...

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    Points : 128
    Points
    128
    Par défaut
    bon, laissons tomber, en somme je dois pas faire cette manière parceque ca devient trop compliqué et parce que c'est me*dique.

    Je deleste, si j'ai un problème avec la mise en place votre méthode (la bonne), et que je trouve pas de solution dans d'autres topics/site/autres, je posterai.

    Merci en tout cas pour les infos

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