C#中dotnetcharting的用法实例详解


本文以实例形式详细讲述了dotnetcharting控件的用法。分享给大家供大家参考。具体用法分析如下:

dotnetcharting 是一个很好用的图表控件,能画出很漂亮的报表,一般常用到的主要有柱状图、饼图、折线图三种。
dotnetcharting 有web版、winform版多个版本可供使用,官方网址:http://www.dotnetcharting.com/ ,官网有很多示例(http://www.dotnetcharting.com/gallery/),而且有winform安装版示例和代码,如下图。
dotnetcharting 有网上破解版的,去百度或谷歌一搜一堆。
说下个人感受,该控件是国外开发的,虽然说这个控件挺好用的,但是感觉这个控件应该在有xp系统的时候就应该有了吧?是国外剩下的技术,咱们一直在用别人不用的技术,捧为珍宝。
有些技术有些人,有些本事就开始自大起来,小有成就的那点技术还藏着掖着。 呵呵。。。

 

接下来上干货,前两天刚使用dotnetcharting 做了个统计报表,代码如下:
 

复制代码 代码如下:
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using dotnetCHARTING.WinForms;
using StationChart.Model;
using StationChart.Utility;
using Chart = dotnetCHARTING.WinForms.Chart;
using Series = dotnetCHARTING.WinForms.Series;
using SeriesCollection = dotnetCHARTING.WinForms.SeriesCollection;
 
namespace ManageSystem
{
    // <summary>
    // 作者:薛江涛
    // 版本:V1.0.0
    // 时间:2014/10/9 11:49:48
    // </summary>
    public class ShowData
    {
        #region 属性
        private string _phaysicalimagepath;//图片存放路径
        private string _xtitle;//图片x座标名称
        private string _ytitle;//图片y座标名称
        private string _seriesname;//图例名称
        private int _picwidth;//图片宽度
        private int _pichight;//图片高度
        private DataTable _dt;//图片数据源
        private DataSet _ds;//图片数据源
 
        private Color _titleBoxColor;//图片标题背景色
        private Font _titleBoxFont;//图片标题字体
        private Color _chartAreaBackgroundColor;//图片背景颜色
        private Font _xAxisLabelFont;//X轴柱状图值字体
        private Font _yAxisLabelFont;//Y轴柱状图值字体
        private Font _xAxisDefaultTickLabelFont;//X轴刻度字体
        private Font _yAxisDefaultTickLabelFont;//Y轴刻度字体
        private SeriesType _chartDefaultSeriesType;//图片类型
        private ChartType _chartType;//图片类型
        //private bool _isMonth; //是否是月显示
        private int _staticColumnWidth;//设置柱状图每个单元格的宽度
        private int _numberPercision;//设置数值小数点
 
        /// <summary>
        /// 图片存放路径
        /// </summary>
        public string PhaysicalImagePath
        {
            set { _phaysicalimagepath = value; }
            get { return _phaysicalimagepath; }
        }
 
        /// <summary>
        /// 图片标题
        /// </summary>
        public string Title { get; set; }
 
        /// <summary>
        /// 图片标题
        /// </summary>
        public string XTitle
        {
            set { _xtitle = value; }
            get { return _xtitle; }
        }
        /// <summary>
        /// 图片标题
        /// </summary>
        public string YTitle
        {
            set { _ytitle = value; }
            get { return _ytitle; }
        }
 
        /// <summary>
        /// 图例名称
        /// </summary>
        public string SeriesName
        {
            set { _seriesname = value; }
            get { return _seriesname; }
        }
        /// <summary>
        /// 图片宽度
        /// </summary>
        public int PicWidth
        {
            set { _picwidth = value; }
            get { return _picwidth; }
        }
        /// <summary>
        /// 图片高度
        /// </summary>
        public int PicHight
        {
            set { _pichight = value; }
            get { return _pichight; }
        }
        /// <summary>
        /// 图片数据源
        /// </summary>
        public DataTable DataSource
        {
            set { _dt = value; }
            get { return _dt; }
        }
        /// <summary>
        /// 图片数据源
        /// </summary>
        public DataSet DataSetSource
        {
            set { _ds = value; }
            get { return _ds; }
        }
 
        public int NumberPercision
        {
            set { _numberPercision = value; }
            get { return _numberPercision; }
        }
 
        public Color TitleBoxColor
        {
            get { return _titleBoxColor; }
            set { _titleBoxColor = value; }
        }
 
        public Font TitleBoxFont
        {
            get { return _titleBoxFont; }
            set { _titleBoxFont = value; }
        }
 
        public Color ChartAreaBackgroundColor
        {
            get { return _chartAreaBackgroundColor; }
            set { _chartAreaBackgroundColor = value; }
        }
 
        public Font XAxisLabelFont
        {
            get { return _xAxisLabelFont; }
            set { _xAxisLabelFont = value; }
        }
 
        public Font YAxisLabelFont
        {
            get { return _yAxisLabelFont; }
            set { _yAxisLabelFont = value; }
        }
 
        public Font XAxisDefaultTickLabelFont
        {
            get { return _xAxisDefaultTickLabelFont; }
            set { _xAxisDefaultTickLabelFont = value; }
        }
 
        public Font YAxisDefaultTickLabelFont
        {
            get { return _yAxisDefaultTickLabelFont; }
            set { _yAxisDefaultTickLabelFont = value; }
        }
 
        public SeriesType ChartDefaultSeriesType
        {
            get { return _chartDefaultSeriesType; }
            set { _chartDefaultSeriesType = value; }
        }
 
        public ChartType ChartType
        {
            get { return _chartType; }
            set { _chartType = value; }
        }
 
        //public bool IsMonth
        //{
        // get { return _isMonth; }
        // set { _isMonth = value; }
        //}
 
 
        public ModelConseme.DateChartEnum SeriesTypeE { get; set; }
 
        public int StaticColumnWidth
        {
            get { return _staticColumnWidth; }
            set { _staticColumnWidth = value; }
        }
 
        #endregion
 
        #region 构造函数
        public ShowData()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
            NumberPercision = 2;
        }
 
        public ShowData(string phaysicalImagePath, string title, string xTitle, string yTitle, string seriesName)
        {
            _phaysicalimagepath = phaysicalImagePath;
            Title = title;
            _xtitle = xTitle;
            _ytitle = yTitle;
            _seriesname = seriesName;
        }
        #endregion
 
        private static readonly object ThisLock = new object();
 
        #region 输出柱形图
        /// <summary>
        /// 柱形图
        /// </summary>
        /// <returns></returns>
        public void CreateColumn(Chart chart)
        {
            try
            {
                //清空图片
                chart.SeriesCollection.Clear();
                //标题框设置
                //标题的颜色
                chart.TitleBox.Label.Color = _titleBoxColor;
                //标题字体设置
                chart.TitleBox.Label.Font = _titleBoxFont;
 
                //控制柱状图颜色
                chart.ShadingEffectMode = ShadingEffectMode.One;
 
                chart.TitleBox.Position = TitleBoxPosition.None;
 
                //图表背景颜色
                chart.ChartArea.Background.Color = ChartAreaBackgroundColor;
                //1.图表类型
                chart.DefaultSeries.Type = _chartDefaultSeriesType;// SeriesType.Column;
                //chart.DefaultSeries.Type = SeriesType.Cylinder;
                //2.图表类型
                //柱状图
                //chart.Type = ChartType.TreeMap;
                ////横向柱状图
                chart.Type = _chartType;// ChartType.ComboHorizontal
                ////横向柱状图
                //chart.Type =_chartType;// ChartType.Gantt;
                ////饼状图
                //chart.Type = ChartType.Pies;
 
                //y轴图表阴影颜色
                //chart.YAxis.AlternateGridBackground.Color = Color.FromArgb(255, 250, 250, 250);
                chart.LegendBox.HeaderLabel = new Label("图表说明", new Font("Microsoft Sans Serif", 10F, FontStyle.Bold, GraphicsUnit.Point, 134));
                //chart.LegendBox.HeaderLabel.Font = new Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134);
                chart.LegendBox.Label.Font = new Font("Microsoft Sans Serif", 9F, FontStyle.Bold, GraphicsUnit.Point, 134);
                chart.Palette = new Color[] { Color.FromArgb(0, 156, 255), Color.FromArgb(255, 99, 49), Color.FromArgb(49, 255, 49), Color.FromArgb(255, 255, 0), };
 
                chart.Title = Title;
                //X轴柱状图值字体
                chart.XAxis.Label.Text = _xtitle;
                chart.XAxis.Label.Font = _xAxisLabelFont;
                //设置X轴刻度值说明字体
                chart.XAxis.DefaultTick.Label.Font = _xAxisDefaultTickLabelFont;
 
                chart.XAxis.StaticColumnWidth = _staticColumnWidth; //每个单元格的宽度
 
 
                //Y轴柱状图值字体
                chart.YAxis.Label.Text = _ytitle;
                chart.YAxis.Label.Font = _yAxisLabelFont;
                //设置Y轴刻度值说明字体
                chart.YAxis.DefaultTick.Label.Font = _yAxisDefaultTickLabelFont;
 
                //Y轴箭头标示
                chart.XAxis.Name = XTitle;
                if (_chartType == ChartType.ComboHorizontal)
                {
                    chart.XAxis.TickLabelPadding = 10;
                    chart.XAxis.Line.StartCap = System.Drawing.Drawing2D.LineCap.Square;
                    chart.XAxis.Line.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
                    chart.XAxis.Line.Width = 5;//箭头宽度
                    chart.XAxis.Line.Color = Color.Gray;
                }
                else
                {
                    chart.YAxis.TickLabelPadding = 10;
                    chart.YAxis.Line.StartCap = System.Drawing.Drawing2D.LineCap.Square;
                    chart.YAxis.Line.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
                    chart.YAxis.Line.Width = 5;//箭头宽度
                    chart.YAxis.Line.Color = Color.Gray;
                    //显示值格式化(小数点显示几位)
                    chart.YAxis.NumberPercision = _numberPercision;
                }
 
                //图片存放路径
                chart.TempDirectory = System.Environment.CurrentDirectory + "\\" + _phaysicalimagepath;
                //图表宽度
                chart.Width = _picwidth;
                //图表高度
                chart.Height = _pichight;
                chart.Series.Name = _seriesname;
                //单一图形
                //chart.Series.Data = _dt;
                //chart.SeriesCollection.Add();
 
                //图例在标题行显示,但是没有合计信息
                //chart.TitleBox.Position = TitleBoxPosition.FullWithLegend;
                //chart.TitleBox.Label.Alignment = StringAlignment.Center;
                //chart.LegendBox.Position = LegendBoxPosition.None; //不显示图例,指不在右侧显示,对上面一行的属性设置并没有影响
 
                chart.DefaultSeries.DefaultElement.ShowValue = true;
                chart.ShadingEffect = true;
                chart.Use3D = false;
                chart.Series.DefaultElement.ShowValue = true;
                chart.SeriesCollection.Add(GetArrayData());
 
            }
            catch (Exception ex)
            {
                LogHelper.WriteErrorLog(ex.ToString(), ex);
            }
        }
 
        /// <summary>
        /// 柱形图
        /// </summary>
        /// <returns></returns>
        public void CreateColumn(Chart chart, List<int> list)
        {
            try
            {
                chart.SeriesCollection.Clear();
                //标题框设置
                //标题的颜色
                chart.TitleBox.Label.Color = _titleBoxColor;
                //标题字体设置
                chart.TitleBox.Label.Font = _titleBoxFont;
 
                //控制柱状图颜色
                chart.ShadingEffectMode = ShadingEffectMode.Five;
                //图表背景颜色
                chart.ChartArea.Background.Color = ChartAreaBackgroundColor;
 
 
                //1.图表类型
                chart.DefaultSeries.Type = _chartDefaultSeriesType;// SeriesType.Column;
                //chart.DefaultSeries.Type = SeriesType.Cylinder;
                //2.图表类型
                //柱状图
                //chart.Type = ChartType.TreeMap;
                ////横向柱状图
                chart.Type = _chartType;// ChartType.ComboHorizontal
                ////横向柱状图
                //chart.Type =_chartType;// ChartType.Gantt;
                ////饼状图
                //chart.Type = ChartType.Pies;
 
                //y轴图表阴影颜色
                //chart.YAxis.AlternateGridBackground.Color = Color.FromArgb(255, 250, 250, 250);
                chart.LegendBox.HeaderLabel = new Label("图表说明", new Font("Microsoft Sans Serif", 10F, FontStyle.Bold, GraphicsUnit.Point, 134));
                //chart.LegendBox.HeaderLabel.Font = new Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134);
                chart.LegendBox.Label.Font = new Font("Microsoft Sans Serif", 9F, FontStyle.Bold, GraphicsUnit.Point, 134);
                chart.Palette = new Color[] { Color.FromArgb(0, 156, 255), Color.FromArgb(255, 99, 49), Color.FromArgb(49, 255, 49), Color.FromArgb(255, 255, 0), };
 
                chart.Title = Title;
                //X轴柱状图值字体
                chart.XAxis.Label.Text = _xtitle;
                chart.XAxis.Label.Font = _xAxisLabelFont;
                //设置X轴刻度值说明字体
                chart.XAxis.DefaultTick.Label.Font = _xAxisDefaultTickLabelFont;
 
                chart.XAxis.StaticColumnWidth = _staticColumnWidth; //每个单元格的宽度
 
 
                //Y轴柱状图值字体
                chart.YAxis.Label.Text = _ytitle;
                chart.YAxis.Label.Font = _yAxisLabelFont;
                //设置Y轴刻度值说明字体
                chart.YAxis.DefaultTick.Label.Font = _yAxisDefaultTickLabelFont;
 
                //Y轴箭头标示
                chart.XAxis.Name = XTitle;
                if (_chartType == dotnetCHARTING.WinForms.ChartType.ComboHorizontal)
                {
                    chart.XAxis.TickLabelPadding = 10;
                    chart.XAxis.Line.StartCap = System.Drawing.Drawing2D.LineCap.Square;
                    chart.XAxis.Line.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
                    chart.XAxis.Line.Width = 5;//箭头宽度
                    chart.XAxis.Line.Color = Color.Gray;
                }
                else
                {
                    chart.YAxis.TickLabelPadding = 10;
                    chart.YAxis.Line.StartCap = System.Drawing.Drawing2D.LineCap.Square;
                    chart.YAxis.Line.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
                    chart.YAxis.Line.Width = 5;//箭头宽度
                    chart.YAxis.Line.Color = Color.Gray;
                    //显示值格式化(小数点显示几位)
                    chart.YAxis.NumberPercision = _numberPercision;
                }
 
                //图片存放路径
                chart.TempDirectory = System.Environment.CurrentDirectory + "\\" + _phaysicalimagepath;
                //图表宽度
                chart.Width = _picwidth;
                //图表高度
                chart.Height = _pichight;
                chart.Series.Name = _seriesname;
                //单一图形
                //chart.Series.Data = _dt;
                //chart.SeriesCollection.Add();
 
                //图例在标题行显示,但是没有合计信息
                //chart.TitleBox.Position = TitleBoxPosition.FullWithLegend;
                //chart.TitleBox.Label.Alignment = StringAlignment.Center;
                //chart.LegendBox.Position = LegendBoxPosition.None; //不显示图例,指不在右侧显示,对上面一行的属性设置并没有影响
 
                chart.DefaultSeries.DefaultElement.ShowValue = true;
                chart.ShadingEffect = true;
                chart.Use3D = false;
                chart.Series.DefaultElement.ShowValue = true;
 
 
                chart.SeriesCollection.Add(GetArrayData(list));
 
            }
            catch (Exception ex)
            {
 
                LogHelper.WriteErrorLog(ex.ToString(), ex);
            }
        }
 
 
        ///// <summary>
        ///// 柱形图,单一图片
        ///// </summary>
        ///// <returns></returns>
        //public void CreateColumn(Chart chart1)
        //{
        // Chart1.Title = _title;
        // Chart1.XAxis.Label.Text = _xtitle;
        // Chart1.YAxis.Label.Text = _ytitle;
        // Chart1.TempDirectory = PhaysicalImagePath;
        // Chart1.Width = _picwidth;
        // Chart1.Height = _pichight;
        // Chart1.Type = ChartType.Combo;
 
        // Chart1.Series.Type = SeriesType.Cylinder;
        // Chart1.Series.Name = _seriesname;
        // Chart1.Series.Data = _dt;
        // Chart1.SeriesCollection.Add();
        // Chart1.DefaultSeries.DefaultElement.ShowValue = true;
        // Chart1.ShadingEffect = true;
        // Chart1.Use3D = false;
        // Chart1.Series.DefaultElement.ShowValue = true;
        //}
 
        #endregion
 
        #region 输出饼图
        /// <summary>
        /// 饼图
        /// </summary>
        /// <returns></returns>
        public void CreatePie(Chart chart)
        {
            try
            {
 
                chart.SeriesCollection.Clear();
                //控制饼图颜色
                chart.ShadingEffectMode = ShadingEffectMode.Two;
 
                chart.TitleBox.Position = TitleBoxPosition.None;
                chart.Title = Title;
                //标题的颜色
                chart.TitleBox.Label.Color = _titleBoxColor;
                //标题字体设置
                chart.TitleBox.Label.Font = _titleBoxFont;
 
                //图表说明
                chart.LegendBox.HeaderLabel = new dotnetCHARTING.WinForms.Label("图表说明", new Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134));
                //chart.LegendBox.HeaderLabel.Font = new Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134);
                chart.LegendBox.Label.Font = new Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 134);
                chart.Palette = new Color[] { Color.FromArgb(0, 156, 255), Color.FromArgb(255, 99, 49), Color.FromArgb(49, 255, 49), Color.FromArgb(255, 255, 0), };
 
 
                chart.Title = Title;
                //X轴柱状图值字体
                chart.XAxis.Label.Text = _xtitle;
                chart.XAxis.Label.Font = _xAxisLabelFont;
                //设置X轴刻度值说明字体
                chart.XAxis.DefaultTick.Label.Font = _xAxisDefaultTickLabelFont;
                chart.XAxis.Label.Text = _xtitle;
                chart.YAxis.Label.Text = _ytitle;
                chart.TempDirectory = _phaysicalimagepath;
                chart.Width = _picwidth;
                chart.Height = _pichight;
                chart.Type = ChartType.Pie;
                chart.Series.Type = SeriesType.Cylinder;
                chart.Series.Name = _seriesname;
                chart.YAxis.NumberPercision = _numberPercision;
 
                chart.ShadingEffect = true;
                chart.Use3D = false;
                chart.DefaultSeries.DefaultElement.Transparency = 20;//线条透明度
                chart.DefaultSeries.DefaultElement.ShowValue = true;
                chart.PieLabelMode = dotnetCHARTING.WinForms.PieLabelMode.Outside;
                chart.SeriesCollection.Add(GetPieArrayData());
                chart.Series.DefaultElement.ShowValue = true;
 
            }
            catch (Exception ex)
            {
                LogHelper.WriteErrorLog(ex.ToString(), ex);
            }
        }
 
        #region 输出曲线图
        /// <summary>
        /// 曲线图,昨日今日对比
        /// </summary>
        /// <returns></returns>
        public void CreateLine(Chart chart)
        {
            try
            {
                chart.SeriesCollection.Clear();
 
                chart.TitleBox.Position = TitleBoxPosition.None;
                //标题的颜色
                chart.TitleBox.Label.Color = _titleBoxColor;
                //标题字体设置
                chart.TitleBox.Label.Font = _titleBoxFont;
                //图表背景颜色
                chart.ChartArea.Background.Color = ChartAreaBackgroundColor;
 
                //X轴柱状图值字体
                chart.XAxis.Label.Font = _xAxisLabelFont;
                //设置X轴刻度值说明字体
                chart.XAxis.DefaultTick.Label.Font = _xAxisDefaultTickLabelFont;
 
                //Y轴柱状图值字体
                chart.YAxis.Label.Font = _yAxisLabelFont;
                //设置Y轴刻度值说明字体
                chart.YAxis.DefaultTick.Label.Font = _yAxisDefaultTickLabelFont;
 
                //Y轴箭头标示
                chart.YAxis.TickLabelPadding = 0;
                chart.YAxis.Line.StartCap = System.Drawing.Drawing2D.LineCap.Square;
                chart.YAxis.Line.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
                chart.YAxis.Line.Width = 5;//箭头宽度
                chart.YAxis.Line.Color = Color.Gray;
 
                chart.Title = Title;
                chart.XAxis.Label.Text = _xtitle;
                chart.YAxis.Label.Text = _ytitle;
                chart.TempDirectory = _phaysicalimagepath;
                // Set the size
                chart.Width = _picwidth;
                chart.Height = _pichight;
                // Set the temp directory
                chart.TempDirectory = "temp";
                // Debug mode. ( Will show generated errors if any )
                chart.Debug = true;
                chart.Type = ChartType.Combo;
                chart.DefaultSeries.Type = SeriesType.Line;
                //chart.Series.Type = SeriesType.Line;
                chart.Series.Name = _seriesname;
                chart.DefaultSeries.DefaultElement.ShowValue = false;
                chart.ShadingEffect = true;
                chart.Use3D = false;
                chart.Series.DefaultElement.ShowValue = true;
                chart.DefaultSeries.DefaultElement.Transparency = 20;//线条透明度
                chart.DateGrouping = TimeInterval.Day;
                ////显示值格式化(小数点显示几位)
                chart.YAxis.NumberPercision = _numberPercision;
 
                chart.OverlapFooter = false;
 
                SeriesCollection mySC = GetRandomData();
                mySC[0].DefaultElement.Color = Color.FromArgb(255, 99, 49);
                mySC[1].DefaultElement.Color = Color.FromArgb(0, 156, 255);
 
                // Add the random data.
                chart.SeriesCollection.Add(mySC);
            }
            catch (Exception ex)
            {
                LogHelper.WriteErrorLog(ex.ToString(), ex);
            }
        }
        #endregion
 
        /// <summary>
        /// 曲线图
        /// </summary>
        /// <returns></returns>
        SeriesCollection GetRandomData()
        {
            SeriesCollection sc = new SeriesCollection();
            try
            {
                DataTable dt = _dt;
 
                var s = new Series();
                var s2 = new Series();
 
                switch (SeriesTypeE)
                {
                    case ModelConseme.DateChartEnum.DayChart:
                        for (int i = 0; i < 24; i++)
                        {
                            s.Name = "今天";
                            s2.Name = "昨天";
                            Element e = new Element();
                            // 每元素的名称
                            e.Name = (i).ToString();
                            // 每元素的大小数值
                            e.YValue = 0;
 
                            Element e2 = new Element();
                            // 每元素的名称
                            e2.Name = (i).ToString();
                            // 每元素的大小数值
                            e2.YValue = 0;
 
                            s.Elements.Add(e);
                            s2.Elements.Add(e2);
                            sc.Add(s);
                            sc.Add(s2);
                        }
 
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            string sodayHH = dt.Rows[i][1].ToString();
                            string today = dt.Rows[i][1].ToString().Substring(0, 10);
                            int HH = Convert.ToInt32(sodayHH.Substring(11));
                            if (DateTime.Now.ToString("yyyy-MM-dd").Equals(today))
                            {
                                sc[0].Elements[HH].YValue = Convert.ToDouble(dt.Rows[i][2].ToString());
                            }
                            else
                            {
                                sc[1].Elements[HH].YValue = Convert.ToDouble(dt.Rows[i][2].ToString());
                            }
                        }
          &nb
« 
» 

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3