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 code pour l'affichage d'un résultat dans ma datagridview [Débutant]


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Bachelier informatique de gestion
    Inscrit en
    Juillet 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bachelier informatique de gestion
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 40
    Points : 20
    Points
    20
    Par défaut Problème de code pour l'affichage d'un résultat dans ma datagridview
    Bonsoir à tous,

    Voilà, j'ai des difficultés avec ma datagridview pour mon travail de fin d'études
    Je n'en ai jamais fait auparavant, j'ai su afficher a partir de ma bd sous phpmyadmin, les données dont j'ai besoin dans ma datagridview

    Mon soucis est que j'aimerais afficher le résultat d'un calcul dans une cellule de ma colonne TOTAL

    DataGridView dtgv = dataGridView1;
    DataTable dt = new DataTable();
    dt = Program.BD.GetTable(string.Format(@"SELECT lien_acte_technique_prix.id AS Id, code_acte_technique.code_acte_technique1 AS Code_1, code_acte_technique2.code_acte_technique2 AS Code_2, nom_acte_technique.nom_acte AS Nom_acte, prix_acte_technique.prix AS Prix
    FROM lien_acte_technique_prix LEFT JOIN code_acte_technique
    ON lien_acte_technique_prix.ref_code_acte_technique = code_acte_technique.id
    LEFT JOIN code_acte_technique2 ON
    lien_acte_technique_prix.ref_code_acte_technique2 = code_acte_technique2.id
    LEFT JOIN nom_acte_technique
    ON lien_acte_technique_prix.ref_nom_acte_technique = nom_acte_technique.id
    LEFT JOIN prix_acte_technique
    ON lien_acte_technique_prix.ref_prix_acte_technique = prix_acte_technique.id"));
    BindingSource bs = new BindingSource();
    bs.DataSource = dt;
    dtgv.DataSource = bs;

    foreach (DataGridViewColumn c in dtgv.Columns)
    {
    c.DataGridView.Font = new Font("Arial", 14F, GraphicsUnit.Pixel);
    }

    for (int i = 0; i < daymonth1; i++)
    {
    //dtgv.Columns.Add(new DataGridViewColumn() { HeaderText = Convert.ToString(i + 1) + "/" + month1, Name = "J" + Convert.ToString(i + 1), ValueType = typeof(int) });
    string Nom = "J" + Convert.ToString(i + 1);
    dtgv.Columns.Add(Nom, Convert.ToString(i + 1) + "/" + month1);
    dtgv.Columns[Nom].ValueType = typeof(int);
    }
    dtgv.Columns.Add("TOTAL", "TOTAL");

    for (int j = 0; j < dtgv.Columns.Count; j++)
    {
    dtgv.Columns[j].ReadOnly = (j < (dtgv.Columns.Count - daymonth1 - 1));
    dtgv.Columns[j].SortMode = DataGridViewColumnSortMode.NotSortable;
    }
    dtgv.CellValidated += new DataGridViewCellEventHandler(dtgv_CellValidated);

    string prix = dtgv.Rows[0].Cells[4].Value.ToString();
    double p = Convert.ToDouble(prix);
    double chiffre = 2;
    double resultat = chiffre * p;
    string r = resultat.ToString();
    label3.Text = r;
    //dtgv.Columns[36].ReadOnly = true;

    //Test afficher le resultat dans la première cellule de la colonne TOTAL
    //dtgv.Rows[0].Cells[36].Value = r;

    }

    Merci d'avance
    Images attachées Images attachées  

  2. #2
    Membre à l'essai
    Homme Profil pro
    Bachelier informatique de gestion
    Inscrit en
    Juillet 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bachelier informatique de gestion
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    Help me

  3. #3
    Membre à l'essai
    Homme Profil pro
    Bachelier informatique de gestion
    Inscrit en
    Juillet 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bachelier informatique de gestion
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 40
    Points : 20
    Points
    20
    Par défaut Voici l'explication plus claire
    Bonjour à tous,

    En pièce jointe une explication plus claire de ce que je voudrais réaliser

    Merci d'avance à tous ceux qui pourront m'aider.
    Fichiers attachés Fichiers attachés

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Bonjour,

    Il faut tout d'abord que tu déclares ta colonne dans ton GridView, côté ASPX.

    Ensuite côté C#, tu gères l'évènement OnRowDataBound de ton GridView, et tu y implémentes ton calcul. Tu pourras accéder à ta colonne, et y mettre la valeur que tu souhaites.

    P.S. : quand tu postes, n'oublie pas d'utiliser les balises [ CODE ] et [/ CODE ] (sans les espaces) pour rendre ton code plus lisible

  5. #5
    Membre à l'essai
    Homme Profil pro
    Bachelier informatique de gestion
    Inscrit en
    Juillet 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bachelier informatique de gestion
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    J'ai oublié de dire je ne fais pas d'ASPX en fait, je ne vois pas comment faire ?
    Je travaille sous VS2008 en C# 2008 express

    Merci d'avance.

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Oups, au temps pour moi. Tu as plusieurs options :

    Tu peux utiliser l'évènement DataBindingComplete pour calculer dès la fin du binding. Tu peux également utiliser l'évènement CellValidated pour faire le calcul dès que l'utilisateur a saisi des données dans la colonne.

    Voici un exemple sur DataBindingComplete :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {
        var objValue3 = 0;
        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            var objValue1 = Convert.ToInt32(row.Cells[0].Value ?? 0);
            var objValue2 = Convert.ToInt32(row.Cells[1].Value ?? 0);
            objValue3 = (objValue1 + objValue2);
            row.Cells[2].Value = objValue3;
        }
    }

    Pour info j'ai au préalable mis mes 3 colonnes dans le DataGridView (une pour Value1, une pour Value2, et une pour Value3 (le résultat calculé). J'ai donc mis AutoGenerateColumns à false.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Bachelier informatique de gestion
    Inscrit en
    Juillet 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bachelier informatique de gestion
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    Merci je vais essayé ça tout de suite

  8. #8
    Membre à l'essai
    Homme Profil pro
    Bachelier informatique de gestion
    Inscrit en
    Juillet 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bachelier informatique de gestion
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    Ca marche j'ai mis le code directement dans l'événement CellValidated
    Avec le code ca prend en fait les valeurs encodés dans la colonne 1/7 et 2/7 et ca affiche directement la somme dans la colonne 3/7 je vais regarder de plus près car je ne dois pas l'afficher directement la somme mais juste récupérer le résultat de la somme pour la multiplier au prix de la ligne (30.74)
    Pour afficher le résultat dans la cellule total de la ligne correspondante

    Merci en tout cas

  9. #9
    Membre à l'essai
    Homme Profil pro
    Bachelier informatique de gestion
    Inscrit en
    Juillet 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bachelier informatique de gestion
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    Voici la façon dont j'ai fais y aurais t'il une manière moins cochon de faire cela?
    J'ai un soucis pour le prix je voudrais que pour chaque ligne le prix soit celui de la ligne a passer dans la multiplication ligne 45
    Comment rechercher par ligne dans la colonne 4 de mon datagridview le prix correspondant ?

    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
     
    private void dtgv_CellValidated(object sender, DataGridViewCellEventArgs e)
            {
                DataGridView dtgv = sender as DataGridView;
                if (dtgv.Columns[e.ColumnIndex].Name.StartsWith("J"))
                {
                    //int quantite = (dtgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == null) ? 0 : (int)dtgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
                    int quantite1 = (dtgv.Rows[e.RowIndex].Cells["J1"].Value == null) ? 0 : (int)dtgv.Rows[e.RowIndex].Cells["J1"].Value;
     
                    var objValue32 = 0;
                    foreach (DataGridViewRow row in dtgv.Rows)
                    {
                        var objValue1 = Convert.ToInt32(row.Cells[0].Value ?? 0);
                        var objValue2 = Convert.ToInt32(row.Cells[1].Value ?? 0);
                        var objValue3 = Convert.ToInt32(row.Cells[2].Value ?? 0);
                        var objValue4 = Convert.ToInt32(row.Cells[3].Value ?? 0);
                        var objValue5 = Convert.ToInt32(row.Cells[4].Value ?? 0);
                        var objValue6 = Convert.ToInt32(row.Cells[5].Value ?? 0);
                        var objValue7 = Convert.ToInt32(row.Cells[6].Value ?? 0);
                        var objValue8 = Convert.ToInt32(row.Cells[7].Value ?? 0);
                        var objValue9 = Convert.ToInt32(row.Cells[8].Value ?? 0);
                        var objValue10 = Convert.ToInt32(row.Cells[9].Value ?? 0);
                        var objValue11 = Convert.ToInt32(row.Cells[10].Value ?? 0);
                        var objValue12 = Convert.ToInt32(row.Cells[11].Value ?? 0);
                        var objValue13 = Convert.ToInt32(row.Cells[12].Value ?? 0);
                        var objValue14 = Convert.ToInt32(row.Cells[13].Value ?? 0);
                        var objValue15 = Convert.ToInt32(row.Cells[14].Value ?? 0);
                        var objValue16 = Convert.ToInt32(row.Cells[15].Value ?? 0);
                        var objValue17 = Convert.ToInt32(row.Cells[16].Value ?? 0);
                        var objValue18 = Convert.ToInt32(row.Cells[17].Value ?? 0);
                        var objValue19 = Convert.ToInt32(row.Cells[18].Value ?? 0);
                        var objValue20 = Convert.ToInt32(row.Cells[19].Value ?? 0);
                        var objValue21 = Convert.ToInt32(row.Cells[20].Value ?? 0);
                        var objValue22 = Convert.ToInt32(row.Cells[21].Value ?? 0);
                        var objValue23 = Convert.ToInt32(row.Cells[22].Value ?? 0);
                        var objValue24 = Convert.ToInt32(row.Cells[23].Value ?? 0);
                        var objValue25 = Convert.ToInt32(row.Cells[24].Value ?? 0);
                        var objValue26 = Convert.ToInt32(row.Cells[25].Value ?? 0);
                        var objValue27 = Convert.ToInt32(row.Cells[26].Value ?? 0);
                        var objValue28 = Convert.ToInt32(row.Cells[27].Value ?? 0);
                        var objValue29 = Convert.ToInt32(row.Cells[28].Value ?? 0);
                        var objValue30 = Convert.ToInt32(row.Cells[29].Value ?? 0);
                        var objValue31 = Convert.ToInt32(row.Cells[30].Value ?? 0);
                        objValue32 = (objValue1 + objValue2 + objValue3 + objValue4 + objValue5 + objValue6 + objValue7 + objValue8 + objValue9 + objValue10 + objValue11 + objValue12 + objValue13 + objValue14 + objValue15 + objValue16 + objValue17 + objValue18 + objValue19 + objValue20 + objValue21 + objValue22 + objValue23 + objValue24 + objValue25 + objValue26 + objValue27 + objValue28 + objValue29 + objValue30 + objValue31);
                        row.Cells[31].Value = objValue32 * 30.74;
                    }               
                }
            }
    Merci d'avance

  10. #10
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Oui déjà tu peux remplacer le morceau de code suivant :

    Code C# : 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
    var objValue32 = 0;
    foreach (DataGridViewRow row in dtgv.Rows)
    {
     var objValue1 = Convert.ToInt32(row.Cells[0].Value ?? 0);
     var objValue2 = Convert.ToInt32(row.Cells[1].Value ?? 0);
     var objValue3 = Convert.ToInt32(row.Cells[2].Value ?? 0);
     var objValue4 = Convert.ToInt32(row.Cells[3].Value ?? 0);
     var objValue5 = Convert.ToInt32(row.Cells[4].Value ?? 0);
     var objValue6 = Convert.ToInt32(row.Cells[5].Value ?? 0);
     var objValue7 = Convert.ToInt32(row.Cells[6].Value ?? 0);
     var objValue8 = Convert.ToInt32(row.Cells[7].Value ?? 0);
     var objValue9 = Convert.ToInt32(row.Cells[8].Value ?? 0);
     var objValue10 = Convert.ToInt32(row.Cells[9].Value ?? 0);
     var objValue11 = Convert.ToInt32(row.Cells[10].Value ?? 0);
     var objValue12 = Convert.ToInt32(row.Cells[11].Value ?? 0);
     var objValue13 = Convert.ToInt32(row.Cells[12].Value ?? 0);
     var objValue14 = Convert.ToInt32(row.Cells[13].Value ?? 0);
     var objValue15 = Convert.ToInt32(row.Cells[14].Value ?? 0);
     var objValue16 = Convert.ToInt32(row.Cells[15].Value ?? 0);
     var objValue17 = Convert.ToInt32(row.Cells[16].Value ?? 0);
     var objValue18 = Convert.ToInt32(row.Cells[17].Value ?? 0);
     var objValue19 = Convert.ToInt32(row.Cells[18].Value ?? 0);
     var objValue20 = Convert.ToInt32(row.Cells[19].Value ?? 0);
     var objValue21 = Convert.ToInt32(row.Cells[20].Value ?? 0);
     var objValue22 = Convert.ToInt32(row.Cells[21].Value ?? 0);
     var objValue23 = Convert.ToInt32(row.Cells[22].Value ?? 0);
     var objValue24 = Convert.ToInt32(row.Cells[23].Value ?? 0);
     var objValue25 = Convert.ToInt32(row.Cells[24].Value ?? 0);
     var objValue26 = Convert.ToInt32(row.Cells[25].Value ?? 0);
     var objValue27 = Convert.ToInt32(row.Cells[26].Value ?? 0);
     var objValue28 = Convert.ToInt32(row.Cells[27].Value ?? 0);
     var objValue29 = Convert.ToInt32(row.Cells[28].Value ?? 0);
     var objValue30 = Convert.ToInt32(row.Cells[29].Value ?? 0);
     var objValue31 = Convert.ToInt32(row.Cells[30].Value ?? 0);
     objValue32 = (objValue1 + objValue2 + objValue3 + objValue4 + objValue5 + objValue6 + objValue7 + objValue8 + objValue9 + objValue10 + objValue11 + objValue12 + objValue13 + objValue14 + objValue15 + objValue16 + objValue17 + objValue18 + objValue19 + objValue20 + objValue21 + objValue22 + objValue23 + objValue24 + objValue25 + objValue26 + objValue27 + objValue28 + objValue29 + objValue30 + objValue31);
     row.Cells[31].Value = objValue32 * 30.74;
    }

    par celui-ci :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    foreach (DataGridViewRow row in dtgv.Rows)
    {
     var currentRowSum = 0;
     for (var i = 0; i <= dtgv.Columns.Count; i++)
     {
      var objValue = Convert.ToInt32(row.Cells[i].Value ?? 0);
      currentRowSum += objValue;
     }
     row.Cells[31].Value = (currentRowSum * 30.74);
    }

    Ce sera déjà un peu plus propre

  11. #11
    Membre à l'essai
    Homme Profil pro
    Bachelier informatique de gestion
    Inscrit en
    Juillet 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bachelier informatique de gestion
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    Un grand merci ça marche bien mon seul soucis mnt c'est de faire correspondre le prix de chaque ligne pour le calcul du total donc je dois remplacer le (30.74 de la ligne 1) en parcourant la colonne 4 par ligne pour la multiplication.

    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
     
    private void dtgv_CellValidated(object sender, DataGridViewCellEventArgs e)
            {
                DataGridView dtgv = sender as DataGridView;
                if (dtgv.Columns[e.ColumnIndex].Name.StartsWith("J"))
                {
                    //int quantite = (dtgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == null) ? 0 : (int)dtgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
                    int quantite1 = (dtgv.Rows[e.RowIndex].Cells["J1"].Value == null) ? 0 : (int)dtgv.Rows[e.RowIndex].Cells["J1"].Value;
     
                    foreach (DataGridViewRow row in dtgv.Rows)
                    {
                        var currentRowSum = 0;
                        for (var i = 0; i <= dtgv.Columns.Count - 7; i++)
                        {
                            var objValue = Convert.ToInt32(row.Cells[i].Value ?? 0);
                            currentRowSum += objValue;
                        }
                        //remplacer la valeur 31 par le nombre de jours du mois = daymonth1 ic 31 jours pour le mois de juillet à inclure dans la fonction
                        //Parcourir la colonne 4 (dtgv.Rows[0].Cells[4]) correspondant aux prix pour avoir le prix de chaque ligne correct pour la multiplication 
                        //Ligne 0 colonne 4 = 30.74, ligne 1 colonne 4 = 96.92, etc 
                        row.Cells[31].Value = (currentRowSum * 30.74);
                    }     
                }
            }
    J'ai mis des commentaires merci d'avance

  12. #12
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Pour trouver le nombre de jours d'un mois, il faut utiliser la méthode DateTime.DaysInMonth. Ce qui donne pour Juillet :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    int daysInJuly = System.DateTime.DaysInMonth(2012, July);

    Donc ton code :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    row.Cells[31].Value = (currentRowSum * 30.74);

    devient (de manière décomposée) :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int daysInMonth = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month); // Get the number of days for the current month and the current year
    int rowIndex = dtgv.Rows.IndexOf(row); // Get the current row's index
     
    row.Cells[daysInMonth].Value = (currentRowSum * (int)dtgv.Rows[rowIndex].Cells[4].Value);

    De manière plus synthétique :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int daysInMonth = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);
     
    row.Cells[daysInMonth].Value = (currentRowSum*(int) dtgv.Rows[dtgv.Rows.IndexOf(row)].Cells[4].Value);

  13. #13
    Membre à l'essai
    Homme Profil pro
    Bachelier informatique de gestion
    Inscrit en
    Juillet 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bachelier informatique de gestion
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    J'avais fait un test comme ceci au départ, dois je faire un convert.todouble avant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //faire un cast pour le prix car nombre decimal ex: 30,74
                //ajouter colonne TOTAL pour les lignes read only true       
                //string prix = dtgv.Rows[0].Cells[4].Value.ToString();
                //double p = Convert.ToDouble(prix);
                //double chiffre = 2;
                //double resultat = chiffre * p;
                //string r = resultat.ToString();
                //label3.Text = r;
    Je pense que ça correspond exactement a ce que je veux, j'ai une erreur pour le (int)dtgv.Rows[dtgv.Rows.IndexOf(row)].Cells[4].Value

    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
     
    foreach (DataGridViewRow row in dtgv.Rows)
                    {
                        var currentRowSum = 0;
                        for (var i = 0; i <= dtgv.Columns.Count - 7; i++)
                        {
                            var objValue = Convert.ToInt32(row.Cells[i].Value ?? 0);
                            currentRowSum += objValue;
                        }
                        int year1 = Convert.ToInt32(monthCalendarDateA.SelectionStart.Year.ToString());
                        int month1 = Convert.ToInt32(monthCalendarDateA.SelectionStart.Month.ToString());
                        int daymonth1 = DateTime.DaysInMonth(year1, month1);
     
                        row.Cells[daymonth1].Value = (currentRowSum * (int)dtgv.Rows[dtgv.Rows.IndexOf(row)].Cells[4].Value);
     
                        //row.Cells[31].Value = (currentRowSum * 30.74);
                    }
    Les 5 premières colonnes de mon datagridview sont remplis a partir d'une requete sql ma colonne 4 donc est la colonne des prix.

    Merci d'avance

  14. #14
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Ah oui, si tu as des décimales, il faut caster en conséquence !

    Donc faire un Convert.ToDouble et éventuellement un Replace, pour remplacer les points "." par des virgules ",", ou vice versa selon la langue du poste.

  15. #15
    Membre à l'essai
    Homme Profil pro
    Bachelier informatique de gestion
    Inscrit en
    Juillet 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bachelier informatique de gestion
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    J'ai un soucis avec le cast, je pense pas que c'est bon ce que je fais ici :s

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
                        var currentRowSum = 0;
                        for (var i = 0; i <= dtgv.Columns.Count - 7; i++)
                        {
                            var objValue = Convert.ToInt32(row.Cells[i].Value ?? 0);
                            currentRowSum += objValue;
                        }
                        int year1 = Convert.ToInt32(monthCalendarDateA.SelectionStart.Year.ToString());
                        int month1 = Convert.ToInt32(monthCalendarDateA.SelectionStart.Month.ToString());
                        int daymonth1 = DateTime.DaysInMonth(year1, month1);
     
                        string prix = (string)dtgv.Rows[dtgv.Rows.IndexOf(row)].Cells[4].Value.ToString();
                        double p = Convert.ToDouble(prix);
                        row.Cells[daymonth1].Value = (currentRowSum * p);

  16. #16
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Tu as un message d'erreur ?

    Il y a souvent des problèmes de conversion liés aux paramètres régionaux (en particulier à cause du symbole décimal, qui est soit une virgule soit un point).

    Tu peux essayer les 2 solutions suivantes, et voir s'il y en a une qui fonctionne :

    Solution 1 - Remplacer la virgule par un point
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    string prix = (string)dtgv.Rows[dtgv.Rows.IndexOf(row)].Cells[4].Value.ToString().Replace(",", ".");

    Solution 2 - Remplacer le point par une virgule
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    string prix = (string)dtgv.Rows[dtgv.Rows.IndexOf(row)].Cells[4].Value.ToString().Replace(".", ",");

    Si aucune de ces solutions ne fonctionne, donne-nous le message d'erreur que tu obtiens.

  17. #17
    Membre à l'essai
    Homme Profil pro
    Bachelier informatique de gestion
    Inscrit en
    Juillet 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bachelier informatique de gestion
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    J'ai le message d'erreur suivant :
    L'exception NullReferenceException n'a pas été gérée
    La référence d'objet n'est pas définie à une instance d'un objet.

    Dans ma table prix de ma bdd c'est un décimal (5,2) que j'ai et c'est des points qu'il y a (30.74) dans la datagridview ça s'affiche avec virgules (30,74)

  18. #18
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Hmmh ok.

    Est-ce que tu sais sur quelle ligne l'erreur est déclenchée ?

  19. #19
    Membre à l'essai
    Homme Profil pro
    Bachelier informatique de gestion
    Inscrit en
    Juillet 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Bachelier informatique de gestion
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2012
    Messages : 40
    Points : 20
    Points
    20
    Par défaut
    Oui sur la ligne 12 quand je met un point d'arrêt, il me marque l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
                        var currentRowSum = 0;
                        for (var i = 0; i <= dtgv.Columns.Count - 7; i++)
                        {
                            var objValue = Convert.ToInt32(row.Cells[i].Value ?? 0);
                            currentRowSum += objValue;
                        }
                        int year1 = Convert.ToInt32(monthCalendarDateA.SelectionStart.Year.ToString());
                        int month1 = Convert.ToInt32(monthCalendarDateA.SelectionStart.Month.ToString());
                        int daymonth1 = DateTime.DaysInMonth(year1, month1);
     
                        string prix = (string)dtgv.Rows[dtgv.Rows.IndexOf(row)].Cells[4].Value.ToString();
                        double p = Convert.ToDouble(prix);
                        row.Cells[daymonth1].Value = (currentRowSum * p);
    Merci

  20. #20
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Ok donc la ligne qui génère l'erreur est la suivante :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    string prix = (string)dtgv.Rows[dtgv.Rows.IndexOf(row)].Cells[4].Value.ToString();

    A mon avis la Value de Cells[4] doit être à null.

    Il faut blinder un peu plus ton code, et vérifier que la valeur de tes cellules ne soit pas null. Pour ce cas présent, tu peux implémenter quelque chose du genre :


    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    string prix = string.Empty;
    DataGridViewRow currentRow = dtgv.Rows[dtgv.Rows.IndexOf(row)];
    if (currentRow != null)
    {
     if (currentRow.Cells[4] != null)
     {
      if (currentRow.Cells[4].Value != null)
      {
       prix = currentRow.Cells[4].Value.ToString();
      }
     }
    }

    Dans cet exemple, on ne récupèrera le prix que si la Value de Cells[4] n'est pas null. Si elle est null, alors on laissera notre prix vide (ligne 1).

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [VB 6.0] - problème avec Datagrid pour l'affichage de valeurs
    Par jimbololo dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/04/2007, 10h57
  2. Formater du code pour un affichage en html
    Par Cladjidane dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/11/2006, 15h35
  3. code pour l'affichage d'un arbre en visual c++
    Par med_anis_dk dans le forum MFC
    Réponses: 8
    Dernier message: 24/05/2006, 23h16
  4. [SimpleXML] Problème PHP5/XML pour des affichages particuliers
    Par vanilla dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 20/04/2006, 14h22

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