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 :
et voici le détail de l'exception :
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; } } }
quelqu'un peut-il m'aider à me dépatouiller ?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:
Partager