about dotnetcharting
dotnetcharting,这个周末花了一个晚上的时间研究了一下这个东西
总结一下用到的问题(太晚了写一点点吧)
1.box图例中的数据显示该序列的总值和,貌似不能显示小数。只能显示int数据么?明天研究一下文档。
2.报表线条颜色,上次用owc做就遇到了这个问题,一直用随机颜色取,但是很容易就取到颜色相同的,感觉应该用一个集合把颜色存起来然后列举,不过这样的话序列可能就是有一定限制了(哪位高手有好的方法希望指点一下)
3.总体说这个报表工具与owc大同小异吧,不过用户体验的效果还是比较好的。
好了,明天整理一下一些常用的属性贴上来,唉文档都是英文的,难搞,cet4的水平还是不行啊。怎么就没有个中国自产的报表让我用呢
更新------------
简介:
DotNetCharting是一个.NET图表控件,对中文支持非常好,而且操作方便,开发快速,既有for webform 也有for winform的,而且.net1.1和2.0都有支持。它的官方地址是http://www.dotnetcharting.com/
最新版本的应该是5.1版本的,我有一个5.0破解版本,还不错吧,稍后放上连接
地址:5.0版本的
强烈推荐一下DotNetCharting的demo地址:
这个是所有的 DEMO 演示 http://www.dotnetcharting.com/demo.aspx
这个是最新5.0版本的 Online Documentation http://www.dotnetcharting.com/documentation/v5_0/webframe.html 里面会有详细的说明和用法。不过是英文的呵呵。
同样你也可以下载下来用http://www.dotnetcharting.com/documentation/v5_0/dncVSHelp.zip
官方还有很多东西我就不一一列举了。这篇就先写到这吧。
写的一个dotnetcharting setdata简单的一个helper吧呵呵写的不好见笑了
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 using System.Data;
5 using dotnetCHARTING;
6 using System.Drawing;
7 namespace SysFrame.BLL
8 {
9 public class ChartSetData
10 {
11 /* add by 包子
12 //Spline曲线
13 //Pyramid 正三角
14 //Marker 点图
15 //Line折线
16 //Cylinder类柱状圆柱体
17 //Cone圆锥状
18 //BubbleShape气泡
19 */
20 #region 属性
21 private string _imagepath;//图片存放路径
22 private string _title; //图片标题
23 private string _xtitle;//图片x座标名称
24 private string _ytitle;//图片y座标名称
25 private string _seriesname;//图例名称
26 private int _picwidth;//图片宽度
27 private int _pichight;//图片高度
28 private DataTable _dt;//图片数据源
29
30 /**/
31 /// <summary>
32 /// 图片存放路径
33 /// </summary>
34 public string PhaysicalImagePath
35 {
36 set { _imagepath = value; }
37 get { return _imagepath; }
38 }
39 /**/
40 /// <summary>
41 /// 图片标题
42 /// </summary>
43 public string Title
44 {
45 set { _title = value; }
46 get { return _title; }
47 }
48 /**/
49 /// <summary>
50 /// 图片标题
51 /// </summary>
52 public string XTitle
53 {
54 set { _xtitle = value; }
55 get { return _xtitle; }
56 }
57 /**/
58 /// <summary>
59 /// 图片标题
60 /// </summary>
61 public string YTitle
62 {
63 set { _ytitle = value; }
64 get { return _ytitle; }
65 }
66
67 /**/
68 /// <summary>
69 /// 图例名称
70 /// </summary>
71 public string SeriesName
72 {
73 set { _seriesname = value; }
74 get { return _seriesname; }
75 }
76 /**/
77 /// <summary>
78 /// 图片宽度
79 /// </summary>
80 public int PicWidth
81 {
82 set { _picwidth = value; }
83 get { return _picwidth; }
84 }
85 /**/
86 /// <summary>
87 /// 图片高度
88 /// </summary>
89 public int PicHight
90 {
91 set { _pichight = value; }
92 get { return _pichight; }
93 }
94 /**/
95 /// <summary>
96 /// 图片数据源
97 /// </summary>
98 public DataTable DataSource
99 {
100 set { _dt = value; }
101 get { return _dt; }
102 }
103 #endregion
104
105 #region 构造函数
106 public ChartSetData()
107 {
108 //
109 // TODO: 在此处添加构造函数逻辑
110 //
111 }
112 public ChartSetData(string PhaysicalImagePath, string Title, string XTitle, string YTitle, string SeriesName, DataTable dt)
113 {
114 _imagepath = PhaysicalImagePath;
115 _title = Title;
116 _xtitle = XTitle;
117 _ytitle = YTitle;
118 _seriesname = SeriesName;
119 _dt = dt;
120 }
121 public ChartSetData(string PhaysicalImagePath, string Title, string XTitle, string YTitle, DataTable dt)
122 {
123 _imagepath = PhaysicalImagePath;
124 _title = Title;
125 _xtitle = XTitle;
126 _ytitle = YTitle;
127 _dt = dt;
128 }
129 #endregion
130
131 #region 输出柱形图
132 /// <summary>
133 /// 输出柱形图
134 /// </summary>
135 /// <param name="chart">chart控件</param>
136 /// <param name="columns">列名</param>
137 /// <param name="seriesBy"></param>
138 public void CreateColumn(dotnetCHARTING.Chart chart, string columns, SeriesBy seriesBy)
139 {
140 //基本样式设置
141 chart.Type = ChartType.Combo;
142 SetDefaultCss(chart, SeriesType.Column);
143
144 chart.SeriesCollection.Add(getSeriesData(columns, seriesBy));
145
146 chart.DefaultSeries.DefaultElement.ShowValue = true;
147 chart.ShadingEffect = true;
148 chart.Use3D = false;
149 chart.Series.DefaultElement.ShowValue = true;
150 }
151 #endregion
152
153 #region 输出曲线图
154 /**/
155 /// <summary>
156 /// 曲线图
157 /// </summary>
158 /// <returns></returns>
159 public void CreateLine(dotnetCHARTING.Chart chart, string columns, SeriesBy seriesBy)
160 {
161 //基本样式设置
162 //chart.Type = ChartType.Combo;
163 SetDefaultCss(chart, SeriesType.Line);
164 chart.ShowDateInTitle = true;
165 chart.DefaultSeries.DefaultElement.ToolTip = chart.DefaultSeries.DefaultElement.Name;
166 chart.ShadingEffect = true;
167 chart.SeriesCollection.Add(getSeriesData(columns, seriesBy));
168
169 chart.DefaultSeries.DefaultElement.ShowValue = true;//element值
170 chart.ShadingEffect = true;
171 chart.Use3D = false;//泛光
172 chart.Series.DefaultElement.ShowValue = true;
173 }
174 #endregion
175
176 #region 输出饼图
177 /**/
178 /// <summary>
179 /// 单饼图
180 /// </summary>
181 /// <returns></returns>
182 public void CreatePie(dotnetCHARTING.Chart chart, string columns)
183 {
184 CreatePie(chart, columns, ChartType.Pie);
185 }
186 /// <summary>
187 /// 多个饼图
188 /// </summary>
189 /// <param name="chart"></param>
190 /// <param name="columns"></param>
191 public void CreatePies(dotnetCHARTING.Chart chart, string columns)
192 {
193 CreatePie(chart, columns, ChartType.Pies);
194 }
195
196 private void CreatePie(dotnetCHARTING.Chart chart, string columns, ChartType chartType)
197 {
198 chart.Type = chartType;
199
200 //但饼图以field为序列,多饼图以columns为序列
201 SeriesBy seriesBy = SeriesBy.field;
202 if (chartType.Equals(ChartType.Pies))
203 seriesBy = SeriesBy.columns;
204 SetDefaultCss(chart, SeriesType.Line);
205
206 chart.ShowDateInTitle = false;
207 chart.ShadingEffect = true;//泛光效果
208 chart.SeriesCollection.Add(getSeriesData(columns, seriesBy));//添加序列到控件
209
210 chart.DefaultSeries.DefaultElement.ShowValue = true;//element值
211 chart.DefaultSeries.DefaultElement.SmartLabel.DynamicDisplay = true;
212 chart.DefaultSeries.DefaultElement.SmartLabel.PieLabelMode = PieLabelMode.Automatic;
213 chart.PieLabelMode = PieLabelMode.Outside;
214 chart.ShadingEffect = true;
215 chart.Use3D = false;
216 chart.Series.DefaultElement.ShowValue = true;
217 }
218 public void CreatePie(dotnetCHARTING.Chart chart, string columns, ChartType chartType, SeriesBy seriesBy)
219 {
220 chart.Type = chartType;
221 //但饼图以field为序列,多饼图以columns为序列
222 SetDefaultCss(chart, SeriesType.Line);
223
224 chart.ShowDateInTitle = false;
225 chart.ShadingEffect = true;//泛光效果
226 chart.SeriesCollection.Add(getSeriesData(columns, seriesBy));//添加序列到控件
227
228 chart.DefaultSeries.DefaultElement.ShowValue = true;//element值
229 chart.DefaultSeries.DefaultElement.SmartLabel.DynamicDisplay = true;
230 chart.DefaultSeries.DefaultElement.SmartLabel.PieLabelMode = PieLabelMode.Automatic;
231 chart.PieLabelMode = PieLabelMode.Outside;
232 chart.ShadingEffect = true;
233 chart.Use3D = false;
234 chart.Series.DefaultElement.ShowValue = true;
235 }
236 #endregion
237
238 #region 内部方法
239 /// <summary>
240 /// 基本样式设定
241 /// </summary>
242 /// <param name="chart"></param>
243 private void SetDefaultCss(dotnetCHARTING.Chart chart, SeriesType seriesType)
244 {
245 chart.Title = this.Title;
246 //系统设置图片大小
247 // int height = StringTools.ObjectToInt(BLL.SysConfigManage.GetConfigValueByKey("ImageHeight"));
248 // int width = StringTools.ObjectToInt(BLL.SysConfigManage.GetConfigValueByKey("ImageWidth"));
249 if (height == 0)
250 {
251 height = 500;
252 }
253 if (width == 0)
254 {
255 width = 900;
256 }
257 chart.Height = height;
258 chart.Width = width;
259 chart.DefaultSeries.Type = seriesType;
260 //标题的颜色
261 chart.TitleBox.Label.Color = Color.Blue;
262 //标题的背景色
263 chart.TitleBox.Background.Color = Color.White;
264 //是否显示底部工具栏
265 chart.Mentor = true;
266 //图片存放的位置
267 chart.TempDirectory = this.PhaysicalImagePath;
268 //说明总数的文字背景
269 chart.LegendBox.Background.Color = Color.Pink;
270 //默认柱样式
271 chart.ShadingEffectMode = dotnetCHARTING.ShadingEffectMode.Five;
272 //显示元素值
273 chart.DefaultElement.ShowValue = true;
274 //chart.DefaultElement.ToolTip = chart.DefaultElement.Name;
275 //chart.ShowDateInTitle = false;
276 //chart.Series.Element.SmartLabel.Text = chart.DefaultElement.Name;
277 //控件是否是3D格式
278 chart.Use3D = false;
279 //阴影效果
280 chart.ShadingEffect = true;
281
282 //Y轴说明
283 chart.YAxis.Name = this.YTitle;
284 //dotnetCHARTING.ScaleRange range = new dotnetCHARTING.ScaleRange(1, 200); //Y 轴的刻度范围
285 chart.YAxis.Label.Color = Color.Red;
286 //chart.YAxis.ScaleRange = range;
287 chart.YAxis.Scale = dotnetCHARTING.Scale.Range;
288 chart.YAxis.Label.Font = new Font("Arial Black", 9, FontStyle.Bold);
289
290 //刻度
291 chart.XAxis.Name = this.XTitle;
292 chart.YAxis.TickLabelPadding = 0;
293 chart.YAxis.Line.StartCap = System.Drawing.Drawing2D.LineCap.Square;
294 chart.YAxis.Line.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
295 chart.YAxis.Line.Width = 5;//左侧label
296 chart.YAxis.Line.Color = Color.Gray;
297
298 //X轴说明
299
300 chart.XAxis.Label.Font = new Font("Arial Black", 9, FontStyle.Bold);
301 chart.XAxis.Line.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
302 chart.XAxis.Line.Width = 2;
303 chart.XAxis.StaticColumnWidth = 80; //每个单元格的宽度
304 chart.XAxis.SweepAngle = 45;
305 chart.XAxis.Line.Color = Color.Gray;
306 chart.XAxis.MinorInterval = 5;
307 chart.DefaultBox.Visible = true;
308
309 //显示值格式化
310 chart.YAxis.NumberPercision = 2;
311
312 //chart.Series.LegendEntry.Value
313 //chart.YAxis.FormatString = "{n:0}";
314 //chart.LegendBox.e
315 }
316
317 /// <summary>
318 /// 单序列
319 /// </summary>
320 /// <returns></returns>
321 private SeriesCollection getSeriesData()
322 {
323 SeriesCollection SC = new SeriesCollection();
324 DataTable dt = this._dt;
325
326 for (int i = 0; i < dt.Rows.Count; i++)
327 {
328 Series s = new Series();
329 s.Name = dt.Rows[i][0].ToString();
330
331 Element e = new Element();
332
333 // 每元素的名称
334 e.Name = dt.Rows[i][0].ToString();
335 //e.SmartLabel.Text = e.Name;
336 //e.SmartLabel.DynamicDisplay = true;
337 //e.SmartLabel.AutoWrap = true;
338 // 每元素的大小数值
339 e.YValue = Convert.ToInt32(dt.Rows[i][1].ToString());
340
341 s.Elements.Add(e);
342 SC.Add(s);
343 }
344 return SC;
345 }
346 /// <summary>
347 /// 多序列元素名字段(例如:指标名)
348 /// </summary>
349 /// <param name="columnName"></param>
350 /// <returns></returns>
351 private SeriesCollection getSeriesData(string columnName, SeriesBy seriesBy)
352 {
353 if (!string.IsNullOrEmpty(columnName))
354 {
355 //--多序列测试
356 //序列集合(年份序列)
357 SeriesCollection SC = new SeriesCollection();
358 //x轴名字集合
359 System.Collections.Generic.List<string> xNames = new System.Collections.Generic.List<string>();
360 if (seriesBy.Equals(SeriesBy.columns))
361 {
362 //序列名
363 for (int i = 1; i < DataSource.Columns.Count; i++)
364 {
365 xNames.Add(DataSource.Columns[i].ColumnName);
366 }
367 for (int k = 0; k < xNames.Count; k++)
368 {
369 Series series = new Series(xNames[k]);
370 for (int j = 0; j < DataSource.Rows.Count; j++)
371 {
372 Element e = new Element();
373 e.Name = DataSource.Rows[j][columnName].ToString();
374 e.YValue = Convert.ToDouble(DataSource.Rows[j][k + 1]);
375 series.Elements.Add(e);
376 }
377 SC.Add(series);
378 }
379 }
380 else if (seriesBy.Equals(SeriesBy.field))
381 {
382 //序列名
383 for (int i = 1; i < DataSource.Columns.Count; i++)
384 {
385 xNames.Add(DataSource.Columns[i].ColumnName);
386 }
387 for (int j = 0; j < DataSource.Rows.Count; j++)
388 {
389 Series series = new Series(DataSource.Rows[j][columnName].ToString());
390 for (int k = 0; k < xNames.Count; k++)
391 {
392 Element e = new Element();
393 e.Name = xNames[k];
394 e.YValue = Convert.ToDouble(DataSource.Rows[j][k + 1]);
395 series.Elements.Add(e);
396 }
397 SC.Add(series);
398 }
399 }
400 //序列颜色设置
401 List<Color> colorObjs = Util.OperationUtil.GetRandomObject.GetListColor();
402 int icolorCount = colorObjs.Count;
403 for (int i = 0; i < SC.Count; i++)
404 {
405 //if (i + i > colorObjs.Count)
406 //{
407 // SC[i].DefaultElement.Color = Util.OperationUtil.GetRandomObject.GetRandomColor();
408 //}
409 //else
410 //{
411 SC[i].DefaultElement.Color = colorObjs[i];
412 //}
413 }
414 return SC;
415 }
416 else
417 {
418 return getSeriesData();
419 }
420 }
421 #endregion
422
423 }
424 public enum SeriesBy
425 {
426 /// <summary>
427 /// 按照列名出序列
428 /// </summary>
429 columns,
430 /// <summary>
431 /// 按照每条记录的field值的出序列
432 /// </summary>
433 field,
434 }
435
436 }
437