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;
}

浙公网安备 33010602011771号