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 :

[C#] export en png d'un chartcontrol


Sujet :

Windows Forms

  1. #1
    Membre régulier Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Points : 86
    Points
    86
    Par défaut [C#] export en png d'un chartcontrol
    Yo bande de gens !

    Bon, mon soucis de cette fin de semaine est le suivant:
    dans une appli console, je fais appel à une classe qui va créer un graphique (barre, courbe, etc) et l'intégrer dans une page HTML créée par ladite appli.
    La classe de création du graphique utilise Datavisualisation.Charting issue de Windows.Forms.
    Problème, à la toute dernière ligne, sur le .SaveImage, le programme plante et me dit qu'il n'y a pas d'élément graphique nommé (du nom que je lui passe, actuellement "finance", pour mes essais).
    Voici le code de la classe :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Windows.Forms.DataVisualization.Charting;
    using System.Drawing;
    using System.Reflection;
    using System.Collections;
    using System.IO;
     
    namespace NewLCGenerator
    {
        class ChartBuilder
        {
            public string CreateGraph(string type, string codeass, ArrayList xvalues, ArrayList yvalues)
            {
                string imageuri = "asf" + codeass + "_fichiers/" + type + ".png";
                string codeimg = "<img alt ='" + type + "' src ='" + imageuri + "'/>";
     
                ChartArea chartArea1 = new ChartArea();
                Chart chart1 = new Chart();
                Title title1 = new Title();
                chartArea1.Name = "Graph1";
     
                switch (type)
                {
                    case "camembert":
                        //code ici
                        break;
                    case "finance":                    
                        title1.Name = "finance";
                        title1.Text = "chiffres clef";
                        Legend legend1 = new Legend();
                        Series series1 = new Series();
                        series1.XValueType = ChartValueType.String;
                        series1.Points.AddXY(xvalues[0], Convert.ToDouble(yvalues[0]));
                        series1.Points.AddXY(xvalues[1], Convert.ToDouble(yvalues[1]));
                        series1.Points.AddXY(xvalues[2], Convert.ToDouble(yvalues[2]));
                        series1.Points.AddXY(xvalues[3], Convert.ToDouble(yvalues[3]));
                        Series series2 = new Series();
                        series2.XValueType = ChartValueType.String;
                        series2.Points.AddXY(xvalues[0], Convert.ToDouble(yvalues[4]));
                        series2.Points.AddXY(xvalues[1], Convert.ToDouble(yvalues[5]));
                        series2.Points.AddXY(xvalues[2], Convert.ToDouble(yvalues[6]));
                        series2.Points.AddXY(xvalues[3], Convert.ToDouble(yvalues[7]));
                        Series series3 = new Series();
                        series3.XValueType = ChartValueType.String;
                        series3.Points.AddXY(xvalues[0], Convert.ToDouble(yvalues[8]));
                        series3.Points.AddXY(xvalues[1], Convert.ToDouble(yvalues[9]));
                        series3.Points.AddXY(xvalues[2], Convert.ToDouble(yvalues[10]));
                        series3.Points.AddXY(xvalues[3], Convert.ToDouble(yvalues[11]));
                        // 
                        // chart1
                        // 
                        chartArea1.AlignmentOrientation = ((AreaAlignmentOrientations)((AreaAlignmentOrientations.Vertical | AreaAlignmentOrientations.Horizontal)));
                        chartArea1.Area3DStyle.Enable3D = true;
                        chartArea1.Area3DStyle.Inclination = 17;
                        chartArea1.Area3DStyle.IsClustered = true;
                        chartArea1.Area3DStyle.Rotation = 25;
                        chartArea1.Area3DStyle.WallWidth = 0;
                        chart1.ChartAreas.Add(chartArea1);
                        legend1.Name = "Legend1";
                        chart1.Legends.Add(legend1);
                        chart1.Location = new System.Drawing.Point(12, 12);
                        chart1.Name = "chart1";
                        series1.ChartArea = "finance";
                        series1.Color = System.Drawing.Color.RoyalBlue;
                        series1.IsValueShownAsLabel = true;
                        series1.IsXValueIndexed = true;
                        series1.Legend = "CA";
                        series1.Name = "Chiffre d'Affaire";
                        series2.ChartArea = "finance";
                        series2.IsValueShownAsLabel = true;
                        series2.IsXValueIndexed = true;
                        series2.Legend = "Legend1";
                        series2.Name = "Résultat opérationnel";
                        series2.XValueType = ChartValueType.Date;
                        series3.ChartArea = "finance";
                        series3.IsValueShownAsLabel = true;
                        series3.IsXValueIndexed = true;
                        series3.Legend = "Legend1";
                        series3.Name = "Résultat net";
                        series3.XValueType = ChartValueType.Date;
                        chart1.Series.Add(series1);
                        chart1.Series.Add(series2);
                        chart1.Series.Add(series3);
                        chart1.Size = new System.Drawing.Size(703, 300);
                        chart1.TabIndex = 0;
                        chart1.Text = "chart1";
                        chart1.Titles.Add(title1);
     
                        break;
                    case "courbe":
                        //code ici.
                        break;
                }
                Directory.CreateDirectory("asf" + codeass + "_fichiers");
                chart1.SaveImage(imageuri, ChartImageFormat.Png);
                return codeimg;
            }
        }
    }
    et voici le détail de l'exception :
    L'exception System.ArgumentException n'a pas été gérée
    HResult=-2147024809
    Message=Un élément de graphique portant le nom «*finance*» est introuvable dans «*ChartAreaCollection*».
    Source=System.Windows.Forms.DataVisualization
    StackTrace:
    à System.Windows.Forms.DataVisualization.Charting.ChartNamedElementCollection`1.VerifyNameReference(String name)
    à System.Windows.Forms.DataVisualization.Charting.Series.PrepareData(Boolean applyPaletteColors)
    à System.Windows.Forms.DataVisualization.Charting.Data.DataManager.PrepareData(Boolean pointsApplyPaletteColors, String[] series)
    à System.Windows.Forms.DataVisualization.Charting.Data.DataManager.ChartPicture_BeforePaint(Object sender, ChartPaintEventArgs e)
    à System.Windows.Forms.DataVisualization.Charting.ChartPicture.Paint(Graphics graph, Boolean paintTopLevelElementOnly)
    à System.Windows.Forms.DataVisualization.Charting.ChartImage.GetImage(Single resolution)
    à System.Windows.Forms.DataVisualization.Charting.Chart.SaveImage(Stream imageStream, ChartImageFormat format)
    à System.Windows.Forms.DataVisualization.Charting.Chart.SaveImage(String imageFileName, ChartImageFormat format)
    à NewLCGenerator.ChartBuilder.CreateGraph(String type, String codeass, ArrayList xvalues, ArrayList yvalues) dans d:\DEVELOPPEMENT\NewLCGenerator\ConsoleApplication4\ChartBuilder.cs:ligne 99
    à NewLCGenerator.Program.ContentListBuilder(String typedoc, String codeass) dans d:\DEVELOPPEMENT\NewLCGenerator\ConsoleApplication4\Program.cs:ligne 456
    à NewLCGenerator.Program.Main(String[] param) dans d:\DEVELOPPEMENT\NewLCGenerator\ConsoleApplication4\Program.cs:ligne 48
    à System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
    à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    à System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    à System.Threading.ThreadHelper.ThreadStart()
    InnerException:
    quelqu'un peut-il m'aider à me dépatouiller ?

  2. #2
    Membre régulier Avatar de Othana
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 188
    Points : 86
    Points
    86
    Par défaut
    Bon bah c'est résolu. Un problème de nommage de la ChartArea. Voici le code corrigé et fonctionnel :
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Windows.Forms.DataVisualization.Charting;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.Reflection;
    using System.Collections;
    using System.IO;
     
    namespace NewLCGenerator
    {
        class ChartBuilder
        {
            public string CreateGraph(string type, string codeass, ArrayList xvalues, ArrayList yvalues)
            {
                string imageuri = @".\asf" + codeass + @"_fichiers\" + type + ".png";
                string codeimg = "<img alt ='" + type + "' src ='" + imageuri + "'/>";
                Directory.CreateDirectory("asf" + codeass + "_fichiers");
     
                ChartArea chartArea1 = new ChartArea();
                Chart chart1 = new Chart();
                Title title1 = new Title();
     
                switch (type)
                {
                    case "camembert":
                        //code ici
                        break;
                    case "finance":
                        chartArea1.Name = type;                    
                        title1.Name = type;
                        title1.Text = "chiffres clef";
                        Legend legend1 = new Legend();
                        Series series1 = new Series();
                        series1.XValueType = ChartValueType.String;
                        series1.Points.AddXY(xvalues[0], Convert.ToDouble(yvalues[0]));
                        series1.Points.AddXY(xvalues[1], Convert.ToDouble(yvalues[1]));
                        series1.Points.AddXY(xvalues[2], Convert.ToDouble(yvalues[2]));
                        series1.Points.AddXY(xvalues[3], Convert.ToDouble(yvalues[3]));
                        Series series2 = new Series();
                        series2.XValueType = ChartValueType.String;
                        series2.Points.AddXY(xvalues[0], Convert.ToDouble(yvalues[4]));
                        series2.Points.AddXY(xvalues[1], Convert.ToDouble(yvalues[5]));
                        series2.Points.AddXY(xvalues[2], Convert.ToDouble(yvalues[6]));
                        series2.Points.AddXY(xvalues[3], Convert.ToDouble(yvalues[7]));
                        Series series3 = new Series();
                        series3.XValueType = ChartValueType.String;
                        series3.Points.AddXY(xvalues[0], Convert.ToDouble(yvalues[8]));
                        series3.Points.AddXY(xvalues[1], Convert.ToDouble(yvalues[9]));
                        series3.Points.AddXY(xvalues[2], Convert.ToDouble(yvalues[10]));
                        series3.Points.AddXY(xvalues[3], Convert.ToDouble(yvalues[11]));
                        // 
                        // chart1
                        // 
                        chartArea1.AlignmentOrientation = ((AreaAlignmentOrientations)((AreaAlignmentOrientations.Vertical | AreaAlignmentOrientations.Horizontal)));
                        chartArea1.Area3DStyle.Enable3D = true;
                        chartArea1.Area3DStyle.Inclination = 17;
                        chartArea1.Area3DStyle.IsClustered = true;
                        chartArea1.Area3DStyle.Rotation = 25;
                        chartArea1.Area3DStyle.WallWidth = 0;
                        chart1.ChartAreas.Add(chartArea1);
                        legend1.Name = "Legend1";
                        chart1.Legends.Add(legend1);
                        chart1.Location = new System.Drawing.Point(12, 12);
                        chart1.Name = type;
                        series1.ChartArea = type;
                        series1.Color = System.Drawing.Color.RoyalBlue;
                        series1.IsValueShownAsLabel = true;
                        series1.IsXValueIndexed = true;
                        series1.Legend = "Legend1";
                        series1.Name = "Chiffre d'Affaire";
                        series2.ChartArea = type;
                        series2.IsValueShownAsLabel = true;
                        series2.IsXValueIndexed = true;
                        series2.Legend = "Legend1";
                        series2.Name = "Résultat opérationnel";
                        series2.XValueType = ChartValueType.Date;
                        series3.ChartArea = type;
                        series3.IsValueShownAsLabel = true;
                        series3.IsXValueIndexed = true;
                        series3.Legend = "Legend1";
                        series3.Name = "Résultat net";
                        series3.XValueType = ChartValueType.Date;
                        chart1.Series.Add(series1);
                        chart1.Series.Add(series2);
                        chart1.Series.Add(series3);
                        chart1.Size = new System.Drawing.Size(703, 300);
                        chart1.TabIndex = 0;
                        chart1.Text = "chart1";
                        chart1.Titles.Add(title1);
                        
                        break;
                    case "courbe":
                        //faire un design sur une appli winform ou webform et importer le code ici.
                        break;
                }
                chart1.SaveImage(imageuri,ImageFormat.Png);
                return codeimg;
            }
        }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/11/2014, 02h14
  2. [illustrator] Couleur d'export en PNG dénaturée
    Par rodolphebrd dans le forum Imagerie
    Réponses: 1
    Dernier message: 03/02/2014, 08h37
  3. Problème de transparence GIF et PNG avec Export et SaveAs
    Par nl5nn dans le forum VBA PowerPoint
    Réponses: 2
    Dernier message: 04/03/2008, 21h31
  4. Réponses: 1
    Dernier message: 05/09/2007, 12h47
  5. Réponses: 3
    Dernier message: 20/08/2007, 09h11

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