Histogramme

Résolu
ismalife Messages postés 193 Date d'inscription jeudi 25 novembre 2010 Statut Membre Dernière intervention 11 janvier 2011 - 5 janv. 2011 à 10:20
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

9 réponses

BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
5 janv. 2011 à 15:17
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
3
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
5 janv. 2011 à 11:26
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
0
ismalife Messages postés 193 Date d'inscription jeudi 25 novembre 2010 Statut Membre Dernière intervention 11 janvier 2011
5 janv. 2011 à 11:37
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 ).
0
ismalife Messages postés 193 Date d'inscription jeudi 25 novembre 2010 Statut Membre Dernière intervention 11 janvier 2011
5 janv. 2011 à 12:06
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;
        }
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
5 janv. 2011 à 14:21
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
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
5 janv. 2011 à 14:32
Salut,

C'est normal qu'il y a une erreur de format, tes données ne sont pas renseignée pour les ca > 1.
0
ismalife Messages postés 193 Date d'inscription jeudi 25 novembre 2010 Statut Membre Dernière intervention 11 janvier 2011
5 janv. 2011 à 14:56
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.
0
BunoCS Messages postés 15476 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 3 mai 2024 103
5 janv. 2011 à 15:08
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
0
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
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
0
Rejoignez-nous