winform MSChart 折线图

参考1:http://www.cnblogs.com/lxblog/archive/2012/05/21/2511823.html

参考2:http://www.cnblogs.com/eye-like/archive/2013/01/10/2854744.html

引用:using System.Windows.Forms.DataVisualization.Charting;

定义页面变量

private Dictionary<int, string> myDic = new Dictionary<int, string>();//用于保存标题,X轴Y轴的坐标名称,及绑定数据字段类型
Chart Chart1;//图表变量

 /// <summary>
        /// 初始化图表演
        /// </summary>
        /// <param name="dt">表数据源</param>
        /// <param name="Xpos">图表X轴起点位置</param>
        /// <param name="Ypos">图表Y轴起点位置</param>
        /// <param name="Dic">第一个字典存标题X轴Y轴名称,其它的折线数据及图列名称</param>
        protected void InitialChart(DataTable dt,int Xpos,int Ypos,Dictionary<int,string> Dic) {
            Chart1 = CreateChart(Xpos, Ypos);
            Chart1.DataSource = dt;//绑定数据
            string[] ShowData = new string[3];
            ShowData = Dic[0].Split('|');
            Chart1.Titles.Add(CreateChartTitle(ShowData[0]));
            Chart1.ChartAreas.Add(CreateChartArea(ShowData[1], ShowData[2]));
            for (int i=1;i<Dic.Count;i++) {
                ShowData = Dic[i].Split('|');
                Chart1.Series.Add(CreateChartSeries(ShowData[0], ShowData[1], ShowData[2]));
            }
            Chart1.Legends.Add(CreateChartLegend());
            this.Controls.Add(Chart1);
        }

        /// <summary>
        /// 创建图表
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        protected Chart CreateChart(int x,int y) {
            Chart chart = new Chart();
            chart.Location = new Point(x,y);
            chart.Anchor = ((AnchorStyles)(AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Bottom));

            chart.Width = this.Width-x-35;
            chart.Height = this.Height-2*y-40;
            //图表的背景色
            chart.BackColor = Color.FromArgb(211, 223, 240);
            //图表背景色的渐变方式
            chart.BackGradientStyle = GradientStyle.TopBottom;
            //图表的边框颜色、
            chart.BorderlineColor = Color.FromArgb(26, 59, 105);
            //图表的边框线条样式
            //Chart1.BorderlineDashStyle = ChartDashStyle.Solid;
            //图表边框线条的宽度
            //Chart1.BorderlineWidth = 2;
            //图表边框的皮肤
            //Chart1.BorderSkin.SkinStyle = BorderSkinStyle.Emboss;
            return chart;
        }

        /// <summary>
        /// 图例及图例的位置
        /// </summary>
        /// <returns></returns>
        protected Legend CreateChartLegend() {
            Legend legend = new Legend();
            legend.Alignment = StringAlignment.Near;
            //图例显示在右边
            legend.Docking = Docking.Right;
            return legend;
        }

        /// <summary>
        /// 创建图表标题
        /// </summary>
        /// <param name="Title"></param>
        /// <returns></returns>
        protected Title CreateChartTitle(string Title) {
            Title title = new Title();
            //标题内容
            title.Text = Title;
            //标题的字体
            title.Font = new System.Drawing.Font("Microsoft Sans Serif", 12, FontStyle.Bold);
            //标题字体颜色
            title.ForeColor = Color.FromArgb(26, 59, 105);
            //标题阴影颜色
            title.ShadowColor = Color.FromArgb(32, 0, 0, 0);
            //标题阴影偏移量
            title.ShadowOffset = 3;
            return title;
        }

        /// <summary>
        /// 创建折线
        /// </summary>
        /// <param name="Xmember">绑定X轴</param>
        /// <param name="Ymember">绑定Y轴</param>
        /// <returns></returns>
        protected Series CreateChartSeries(string Xmember,string Ymember,string STitle) {
            Series series = new Series();
            //折线宽度
            series.BorderWidth = 3;
            //折线阴影颜色
            series.ShadowColor = Color.Black;
            //折线阴影宽度
            series.ShadowOffset = 2;
            //是否显示数据说明
            series.IsVisibleInLegend = true;
            //折线上数据点上是否有数据显示
            series.IsValueShownAsLabel = false;
            //折线上的数据点标志类型
            series.MarkerStyle = MarkerStyle.Circle;
            //折线数据点的大小
            series.MarkerSize = 8;
            //设置图表类型
            series.ChartType = SeriesChartType.Line;
            //X轴数据成员列
            series.XValueMember = Xmember;
            series.YValueMembers = Ymember;
            //显示网格内纵坐标线
            series.IsValueShownAsLabel = true;
            //图例名称
            series.LegendText = STitle;
            return series;
        }

        /// <summary>
        /// 清除折线
        /// </summary>
        /// <param name="mychart"></param>
        protected void ClearChartSeries(Chart mychart) {
            foreach (var series in mychart.Series)
            {
                series.Points.Clear();
            }
            //mychart.Legends.Clear();
            //foreach (var legend in mychart.Legends) {
            //    legend.cl
            //}
        }
        /// <summary>
        /// 创建网格区域
        /// </summary>
        /// <returns></returns>
        protected ChartArea CreateChartArea(string Xtitle,string Ytitle) {
            ChartArea chartarea = new ChartArea();
            //背景色
            chartarea.BackColor = Color.FromArgb(64, 165, 191, 228);
            //背景渐变方式
            chartarea.BackGradientStyle = GradientStyle.TopBottom;
            //渐变和阴影的辅助背景色
            chartarea.BackSecondaryColor = Color.White;
            //边框颜色
            chartarea.BorderColor = Color.FromArgb(64, 64, 64, 64);
            //阴影颜色
            chartarea.ShadowColor = Color.Transparent;

            //设置X轴和Y轴线条的颜色和宽度
            chartarea.AxisX.LineColor = Color.FromArgb(64, 64, 64, 64);
            chartarea.AxisX.LineWidth = 2;
            chartarea.AxisY.LineColor = Color.FromArgb(64, 64, 64, 64);
            chartarea.AxisY.LineWidth = 2;

            //设置图表区网格横纵线条的颜色和宽度
            chartarea.AxisX.MajorGrid.LineColor = Color.FromArgb(64, 64, 64, 64);
            chartarea.AxisX.MajorGrid.LineWidth = 1;
            chartarea.AxisY.MajorGrid.LineColor = Color.FromArgb(64, 64, 64, 64);
            chartarea.AxisY.MajorGrid.LineWidth = 1;
            //chartarea.AxisX.MajorGrid.Enabled = false;//不显示竖着的分割线

            chartarea.AxisX.Title = Xtitle;//X轴标题
            chartarea.AxisX.TitleAlignment = StringAlignment.Center;//设置Y轴标题的名称所在位置位远
            chartarea.AxisY.Title = Ytitle;//X轴标题
            chartarea.AxisY.TitleAlignment = StringAlignment.Center;//设置Y轴标题的名称所在位置位远
            chartarea.AxisX.Interval = 1;//X轴数据的间距

            //chartarea.AxisX.ScaleView.Size = 5;//X轴视野范围内共有多少个数据点

            return chartarea;
        }

  

//字典字段赋初值
myDic.Add(0, "年营业额盈亏平衡对比图|日期(月)|金额(万元)");
myDic.Add(1, "mth|clf|材料费");
myDic.Add(2, "mth|gsf|工时费");
myDic.Add(3, "mth|yye|营业额");

//图表初始化调用
if (Chart1 == null)
{
    myDic[0] = years.Text + myDic[0];
    InitialChart(temptable, 270, 20, myDic);
}
else
 {
     ClearChartSeries(Chart1);
     Chart1.Titles[0].Text= years.Text + this.Text;
     Chart1.DataSource = temptable;
 }

  

posted @ 2016-10-29 12:26  xszjk  阅读(1342)  评论(0)    收藏  举报