Histogramme [Résolu]

Messages postés
193
Date d'inscription
jeudi 25 novembre 2010
Statut
Membre
Dernière intervention
11 janvier 2011
- - Dernière réponse : ismalife
Messages postés
193
Date d'inscription
jeudi 25 novembre 2010
Statut
Membre
Dernière intervention
11 janvier 2011
- 5 janv. 2011 à 15:21
Bonjour à tous

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

Quand à moi me revoici sur le forum, mon problème est bien connu maintenant,
ou plutot mon projet .
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 :
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
Afficher la suite 

9 réponses

Meilleure réponse
Messages postés
14554
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
16 juillet 2019
88
3
Merci
En gros, tu dois le faire en 2 fois. Au lieu de ça
ca[i] = Convert.ToDouble(row["ca_" + (i + 1).ToString()].ToString().Replace('.', ','));

il faut faire plutôt
String strCa = row["ca_" + (i + 1).ToString()].ToString();
ca[i] = String.IsNullOrEmpty(srtCa) ? 0 : Convert.ToDouble(strCa.Replace('.', ','));

ou un truc du genre

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 131 internautes nous ont dit merci ce mois-ci

Commenter la réponse de BunoCS
Messages postés
14554
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
16 juillet 2019
88
0
Merci
Salut isma!
Peux-tu détailler un peu plus? Quel est le comportement exactement?
La prochaine fois, pense à mettre un titre plus explicite

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
Commenter la réponse de BunoCS
Messages postés
193
Date d'inscription
jeudi 25 novembre 2010
Statut
Membre
Dernière intervention
11 janvier 2011
0
Merci
salut buno,

d'abord "sorry" pour le titre

ben disons que le comportement peux pas le voir car ça compile pas.
Par contre en passant en commentaire la ligne en question :
                ca[i] = Convert.ToDouble(row["ca_" + (i + 1).ToString()].ToString().Replace('.', ','));


le widget m'affiche l'histogramme mais qu'avec les 12 batons de l'année précédente :
precCa[i] = Convert.ToDouble(row["ca_prec_" + (i + 1).ToString()].ToString().Replace('.', ','));
Là cette ligne marche.

Alors je ne sais pas pourquoi la première ne marche pas ( ou plutot ne marche plus ).
Commenter la réponse de ismalife
Messages postés
193
Date d'inscription
jeudi 25 novembre 2010
Statut
Membre
Dernière intervention
11 janvier 2011
0
Merci
en réalité voici le code complet de mon histogramme qui marchait avant le début de l'année :

private void CreerGraphique(ZedGraphControl zgc)
        {
            string filePath = "http://www.beautefrance.com:8080/script/widget_statsvente.php";
            XmlTextReader txtReader = new XmlTextReader(filePath);
            statsdataset.Clear();

            statsdataset.ReadXml(txtReader);
            dataGridView1.DataSource = statsdataset;
            dataGridView1.DataMember = "stat";

            double[] ca = new double[12];
            double[] precCa = new double[12];

            DataRow row = statsdataset.Tables["stat"].Rows[0];
            for (int i = 0; i < 12; i++)
            {
                ca[i] = Convert.ToDouble(row["ca_" + (i + 1).ToString()].ToString().Replace('.', ','));
                precCa[i] = Convert.ToDouble(row["ca_prec_" + (i + 1).ToString()].ToString().Replace('.', ','));
            }

            GraphPane myPane = zedGraphControl1.GraphPane;

            // titre et nomination des axes x et y
            myPane.Title.Text = "Histogramme";
            myPane.XAxis.Title.Text = "Mois de l'année";
            myPane.YAxis.Title.Text = "Chiffres d'Affaires";

            string[] str = { "Janv.", "Févr.", "Mars", "Avr.", "Mai", "Juin", "Juill.", 
                    "Août", "Sept.", "Oct.", "Nov.", "Dec." };

            // creation des batons
            BarItem myCurve = myPane.AddBar("Année " + (DateTime.Now.Year - 1).ToString(), null, precCa, Color.CornflowerBlue);
            BarItem myCurve1 = myPane.AddBar("Année " + DateTime.Now.Year.ToString(), null, ca, Color.Purple);

            // Fill the axis background with a color gradient
            myPane.Chart.Fill = new Fill(Color.White,
               Color.FromArgb(255, 255, 166), 45.0F);

            zedGraphControl1.AxisChange();

            // expand the range of the Y axis slightly to accommodate the labels
            myPane.YAxis.Scale.Max += myPane.YAxis.Scale.MajorStep;

            // Create TextObj's to provide labels for each bar
            BarItem.CreateBarLabels(myPane, false, "f0");

            // dessine les nouvelles valeurs de X à la place des anciennes
            myPane.XAxis.MajorTic.IsBetweenLabels = true;
            // appel du nouvel affichage des abcisses
            myPane.XAxis.Scale.TextLabels = str;
            // Mis en place du nouveau texte des abcisses 
            myPane.XAxis.Type = ZedGraph.AxisType.Text;

            PointPairList hList = new PointPairList();
            myPane.XAxis.Type = ZedGraph.AxisType.Text;
            // une graduation en X est egal à 1 mois
            myPane.XAxis.Scale.MajorStep = 1;
            myPane.XAxis.Scale.MajorUnit = DateUnit.Month;
            // Renverser les labels des abcisses de 65°
            myPane.XAxis.Scale.FontSpec.Angle = 65;
            myPane.XAxis.Scale.FontSpec.IsBold = true;
            myPane.XAxis.Scale.FontSpec.Size = 12;
            myPane.XAxis.Scale.Format = "M";

            zedGraphControl1.Refresh();
            zedGraphControl1.IsEnableVZoom = false;
        }
Commenter la réponse de ismalife
Messages postés
14554
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
16 juillet 2019
88
0
Merci
Ah bah oui.
Tu remarqueras que, dans le XML, tous les ca des mois qui ne sont pas passés sont vides.
c'est donc à toi de gérer le cas. Regardes du côté de TryParse, ou un truc du genre...

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
Commenter la réponse de BunoCS
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
21
0
Merci
Salut,

C'est normal qu'il y a une erreur de format, tes données ne sont pas renseignée pour les ca > 1.
Commenter la réponse de nhervagault
Messages postés
193
Date d'inscription
jeudi 25 novembre 2010
Statut
Membre
Dernière intervention
11 janvier 2011
0
Merci
salut les mecs,

oui c'est ce que j'étais en train de regarder justement
Le problème c'est que pour le CA de février par exemple, je récupères une chaine vide (""), que je ne peux pas convertir en Double.
Car en effet mon fichier xml est comme suit :
<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>


Donc ça je l'ai bien compris.

Mais comme depuis l'année dernière, il ne s'est écoulé que 10 jours
ben je ne suis pas plus meilleur développeur .

Alors au niveau du code ça coince.
Commenter la réponse de ismalife
Messages postés
14554
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
16 juillet 2019
88
0
Merci
Y'a rien de dur pourtant:
si chaine vide alors tu mets 0

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
Commenter la réponse de BunoCS
Messages postés
193
Date d'inscription
jeudi 25 novembre 2010
Statut
Membre
Dernière intervention
11 janvier 2011
0
Merci
Ah d'accord, moi j'étais parti sur des conditions if ()

ahlala, n'est pas développeur qui veut.
On le deviens pas comme ça en tout cas.

Ben j'ai tester et ça marche

super buno

Merci
Commenter la réponse de ismalife