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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    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 : 43
    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
    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 : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    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.

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    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 : 43
    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
    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 éclairé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 323
    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.

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