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 :

histogramme dans un winform


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 193
    Par défaut histogramme dans un winform
    Bonjour à tous

    tout d'abord bonne année à tous. Plein de bonheur à vous et vos proches.

    Alors ce matin j'ai constaté en compilant mon widget, que ce dernier présente
    un bug de changement d'année, et ce problème c'est l'histogramme (puisque qu'il compare le
    chiffre d'affaires de 2 années). Un problème que je n'avais avant les vacances.

    La ligne en question est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DataRow row = statsdataset.Tables["stat"].Rows[0];
                for (int i = 0; i < 12; i++)
                {
                    //message : le format de la chaine d'entrée est incorrect
                    ca[i] = Convert.ToDouble(row["ca_" + (i + 1).ToString()].ToString().Replace('.', ','));
                    precCa[i] = Convert.ToDouble(row["ca_prec_" + (i + 1).ToString()].ToString().Replace('.', ','));
                }

    Merci pour ceux qu'on le temps de me répondre

    P.S. : ce code a été réalisé grace à toopac, alors si jamais
    tu vois ce message.... Merci de me faire signe

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2010
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2010
    Messages : 164
    Par défaut
    la valeur de row["ca_" + (i + 1).ToString()] est vide ou quoi ?
    ça se produit pour quelle valeur de i ?

  3. #3
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Par défaut
    salut ismababa,

    c'est quoi ton erreur exactement? c'est à la compilation ou à l'exécution? (chez moi ça compile).

    le problème viens de la valeur lors du cast?

    utilise le débogueur pour voir la valeur de row["ca_xxx"] ou row["ca_prec_xxx"]


    Si tu n'avais pas ce problème avant les vacances, tu dois surement avoir des nouvelles données. Si je me rappelle bien c'était un xml qui recensait les CA de l'année n et n-1. Vu qu'on est passé en 2011, elles ont surement changé. Regarde si elles sont du même format qu'il y a quelques semaines.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 193
    Par défaut
    salut toopac, comment vas-tu ?
    Content de t'avoir retrouvé

    Ben disons que ça ne compile plus. Le message d'erreur suivant s'affiche à la
    ligne suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ca[i] = Convert.ToDouble(row["ca_" + (i + 1).ToString()].ToString().Replace('.', ','));
    message :
    le format de la chaine d'entrée est incorrect

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 193
    Par défaut
    donc cela concerne l'année en cours, car quand je la passe en commentaire,
    mon histogramme est là, mais avec les batons de l'année précédentes.
    C'est uniquement la ligne en question, mais je n'arrive pas à comprendre pourquoi j'ai ce message

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 193
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <ca_1>3893.42</ca_1>
    <ca_2></ca_2>
    <ca_3></ca_3>
    <ca_4></ca_4>
    <ca_5></ca_5>
    <ca_6></ca_6>
    <ca_7></ca_7>
    <ca_8></ca_8>
    <ca_9></ca_9>
    <ca_10></ca_10>
    <ca_11></ca_11>
    <ca_12></ca_12>
    Voici le format du xml depuis le 1er janvier
    Du fait, peut etre qu'on est pas encore de valeur après janvier

    ??????

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 193
    Par défaut
    Le format est le meme

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 193
    Par défaut
    ou si tu le souhaite je peux te mettre le code complet de l'histo.....

    je sais pas si ça va te servir puisque c'est toi qui me la "pondu"

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 193
    Par défaut
    salut tontonks
    excuse j'ai pas vu ta réponse.

    oui on constate sur le xml que certaines valeurs sont vides.
    Ce qui est normal puisqu'on rentre dans une nouvelle année.

    Alors penses tu que le problème viendrait de là ????

  10. #10
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Par défaut
    je crois que tu confonds erreur de compilation et d'exécution.
    ça compile très bien, mais c'est à l'exécution du programme qu'une exception est levée.

    Le problème c'est que pour le CA de février par exemple, tu récupères une chaine vide (""), que tu ne peux pas convertir en Double.

    Donc avant de la convertir, soit tu testes si ta chaîne est vide, soit tu utilises Double.TryParse

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 193
    Par défaut
    Franchement merci pour tes explications. Je te trouve super pédagogue.

    Au niveau du raisonnement c'est super clair, par contre au niveau du codage j'ai toujours des difficultés.

    Donc voici ce que je fais et ça ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ca[i] = Double.TryParse(row["ca_" + (i + 1).ToString()].ToString().Replace('.', ','));
    je sais, j'ai du mal.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 193
    Par défaut
    je dois faire une condition je pense.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (ca[i] != 0)
                    {
                        ca[i] = Convert.ToDouble(row["ca_" + (i + 1).ToString()].ToString().Replace('.', ','));
                    }
    else
    {
     
    }
    un truc du genre ???

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 193
    Par défaut
    vais réfléchir avant de dire des bêtises.

    je fais quelque test et on verra.

    en tout cas merci pour les indications.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 193
    Par défaut
    alors je pense avoir la base, mais je n'arrive pas à savoir comment compléter ce 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
     
     for (int i = 0; i < 12; i++)
                {
                    if ("ca_".Length == 0)
                    {
     
                    }
                    else
                    {
                        ca[i] = Convert.ToDouble(row["ca_" + (i + 1).ToString()].ToString().Replace('.', ','));
                    }
     
                    precCa[i] = Convert.ToDouble(row["ca_prec_" + (i + 1).ToString()].ToString().Replace('.', ','));
                }
    qu'en penses-tu toopac ?

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 193
    Par défaut
    ARFFFFFF

    J'ai encore dis n'imp il me semble

    ça peut pas etre ça.

    Bon, vais pas y allé par 4 chemins.
    Toopac stp qu'est ce que je dois mettre ?
    Je sais que tu connais la réponse, comparé à moi.

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 193
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String strCa = row["ca_" + (i + 1).ToString()].ToString();
    ca[i] = String.IsNullOrEmpty(srtCa) ? 0 : Convert.ToDouble(strCa.Replace('.', ','));
    ça y es merci de m'avoir mis sur la voie

  17. #17
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Salut,
    Faudrait surtout que tu lises la documentation (dont il t'a donné le lien) plutôt que d'écrire bêtement sans comprendre. Il a bien dit "utilises Double.TryParse", pas "remplace Convert.ToDouble par Double.TryParse".

    La documentation de Double.TryParse elle dit que la signature de la fonction est :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // s = chaine à convertir
    // result = le résultat de la conversion si elle à réussit
    // retourne true en cas de succès, sinon false.
    bool Double.TryParse(string s, out double result);

    Donc tu écris
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    double resultat;
    if (Double.TryParse(row["ca_" + i].ToString(), out resultat)) ca[i] = resultat;

    Concernant la tentative de avec le if
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ("ca_".Length == 0)

    Je ne sais pas si tu sais, mais elle est pas prête de se vérifier cette condition "ca_" fera toujours 3 caractères.
    Et puis si tu as le problème pour row["ca_" + i] tu l'auras aussi pour row[ca_prec_" + i].

    Sinon, le coup de faire des .ToString().Replace() c'est assez moyen.
    Normalement on passe par NumberFormatInfo.

  18. #18
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Par défaut
    Citation Envoyé par ismababa Voir le message
    Bon, vais pas y allé par 4 chemins.
    Toopac stp qu'est ce que je dois mettre ?
    Je sais que tu connais la réponse, comparé à moi.
    j'ai effectivement la réponse, mais te la donner sans que tu comprennes derrière ne va pas t'avancer à grand chose, la preuve ici, tu n'a visiblement pas tout compris au code que je t'avais donnée précédemment.

    Il n'est pas là pour être simplement copié collé, mais compris puis réécrit.
    D'ailleurs il n'est pas super propre comme l'a souligné ctxnop, pour résoudre le problème des séparateurs décimaux, il vaut effectivement mieux utiliser NumberFormatInfo. (un exemple d'utilisation est donné ici http://msdn.microsoft.com/fr-fr/library/9s9ak971.aspx)

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 193
    Par défaut
    Ben oui mais ça marche en tout cas

    les gars je rappel que ça fait meme pas un an que je fais ça.
    ce n'étais pas mon métier avant. Là je suis en stage et je sors d'une formation
    et non d'une licence pro. j'ai commencé à programmé ya un an
    et non quand j'avais l'âge de 13 ans comme beaucoup d'entre vous

    Alors je pense qu'il est tout a fait normal que je n'ai pas les meme facilités que
    vous.

    Puis je suis sur un forum, donc je pense que c'est fait pour ça.......

    Merci toopac.

    quand à toi ctxnop si tu veux faire des remarques
    ben fais-en avant que le problème soit résolu.
    Et puis j'ai pas attendu que tu dises que mes reflexions soit bête pour m'en rendre compte car je l'ai marqué just au dessus.
    Alors entre nous ce que tu as marqué ne ma absolument pas servi.

  20. #20
    Modérateur
    Avatar de toopac
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 940
    Par défaut
    Citation Envoyé par ismababa Voir le message
    les gars je rappel que ça fait meme pas un an que je fais ça.
    ce n'étais pas mon métier avant. Là je suis en stage et je sors d'une formation
    et non d'une licence pro. j'ai commencé à programmé ya un an
    c'est justement pour ça que je ne pense pas que te donner le code tout de suite sans que tu l'ai compris soit la bonne solution.

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

Discussions similaires

  1. [C#] Faire un Histogramme sur une Winform
    Par Jimmy_S dans le forum Windows Forms
    Réponses: 4
    Dernier message: 21/07/2008, 15h05
  2. Réponses: 28
    Dernier message: 13/07/2008, 14h31
  3. [C#]Edition de fichiers office dans une winform
    Par cyrille_naert dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/01/2007, 16h50
  4. [C#] Passer un dataset en paramètre dans un WinForm enfant
    Par iDaaX dans le forum Windows Forms
    Réponses: 3
    Dernier message: 06/01/2005, 21h55

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