华恒Mes鼎捷代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

366 lines
14 KiB

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraCharts;
using DevExpress.Utils;
namespace ICSSoft.Frame.WatchPanel
{
public partial class FormWatch1 : Form
{
CtrlAutoSize autosize;
public FormWatch1(WatchData data)
{
InitializeComponent();
this.WindowState = FormWindowState.Maximized;
this.Resize += new EventHandler(label1_Resize);
autosize = new CtrlAutoSize(this); //实例化对象并传递"this"
autosize.setTag(this); //控件随窗体变大
DataTable dt = CreateData();
this.chartControl1.DataSource = dt;
CreateChart(dt); //创建折线图
List<string> list = new List<string>();
this.chartControl2.DataSource = dt;
CreatChart2(dt,list); //创建柱形图
}
List<System.Drawing.Color> colorList = new List<Color> { Color.Yellow,Color.Blue, Color.Gray, Color.White, Color.Yellow };
private Point mPoint = new Point();
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
mPoint.X = e.X;
mPoint.Y = e.Y;
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point myPosittion = MousePosition;
myPosittion.Offset(-mPoint.X, -mPoint.Y);
Location = myPosittion;
}
}
private DataTable CreateData()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("类型"));
dt.Columns.Add(new DataColumn("2005-1月", typeof(decimal)));
dt.Columns.Add(new DataColumn("2005-2月", typeof(decimal)));
dt.Columns.Add(new DataColumn("2005-3月", typeof(decimal)));
dt.Columns.Add(new DataColumn("2005-4月", typeof(decimal)));
dt.Columns.Add(new DataColumn("2005-5月", typeof(decimal)));
dt.Columns.Add(new DataColumn("2005-6月", typeof(decimal)));
dt.Rows.Add(new object[] { "员工人数", 437, 437, 414, 397, 387, 378 });
dt.Rows.Add(new object[] { "人均月薪", 3964, 3961, 3979, 3974, 3967, 3972 });
dt.Rows.Add(new object[] { "成本TEU", 3104, 1339, 3595.8, 3154.5, 2499.8, 3026 });
dt.Rows.Add(new object[] { "人均生产率", 7.1, 3.06, 8.69, 7.95, 6.46, 8.01 });
dt.Rows.Add(new object[] { "占2005年3月人数比例", 1.06, 1.06, 1, 0.96, 0.93, 0.91 });
return dt;
}
private void CreatChart2(DataTable dt,List<string> list)
{
chartControl2.Series.Clear();
//// 柱状图里的第一个柱
//Series Series1 = CreateSeries2("员工人数", ViewType.Bar, dt, 0);
////Series Series1 = new Series("员工人数", ViewType.Bar);
//Series1.DataSource = dt;
//Series1.ArgumentScaleType = ScaleType.Qualitative;
//Series1.ArgumentDataMember = "2005-1月";
//// 以哪个字段进行显示
//Series1.View.Color = Color.Yellow;
//Series1.ValueScaleType = ScaleType.Numerical;
//// 柱状图里的柱的取值字段
//Series1.ValueDataMembers.AddRange(new string[] { "2005-1月" });
// 柱状图里的第一个柱
Series Series1 = CreateSeries2("员工人数", ViewType.Bar, dt, 0);
//Series Series1 = new Series("员工人数", ViewType.Bar);
Series1.DataSource = dt;
Series1.ArgumentScaleType = ScaleType.Qualitative;
//Series1.ArgumentDataMember = "2005-1月";
// 以哪个字段进行显示
Series1.View.Color= Color.Yellow;
Series1.ValueScaleType = ScaleType.Numerical;
// 柱状图里的柱的取值字段
//Series1.ValueDataMembers.AddRange(new string[] { "2005-2月" });
// 柱状图里的第二柱
Series Series2 = CreateSeries2("人均月薪", ViewType.Bar, dt, 1);
Series2.Label.TextColor = Color.Yellow;
//Series Series2 = new Series("", ViewType.Bar);
Series2.DataSource = dt;
Series2.View.Color = Color.Lime;
Series2.ArgumentScaleType = ScaleType.Qualitative;
//Series2.Vi = ;
//Series2.ArgumentDataMember = "2005-2月";
Series2.ValueScaleType = ScaleType.Numerical;
//Series2.ValueDataMembers.AddRange(new string[] { "2005-2月" });
chartControl2.Series.Add(Series1);
chartControl2.Series.Add(Series2);
XYDiagram diagram = (XYDiagram)chartControl2.Diagram;
diagram.AxisY.GridLines.Visible = true;//Y轴网格线
//diagram.AxisX.GridLines.Visible = true;
diagram.AxisY.GridLines.Color = Color.Gray;//Y轴网格线的颜色
}
private Series CreateSeries2(string caption, ViewType viewType, DataTable dt, int rowIndex)
{
Series series = new Series(caption, viewType);
for (int i = 1; i < dt.Columns.Count; i++)
{
string argument = dt.Columns[i].ColumnName;//参数名称
decimal value = (decimal)dt.Rows[rowIndex][i];//参数值
series.Points.Add(new SeriesPoint(argument, value));
}
//柱子显示纯色
BarSeriesView sv1 = (BarSeriesView)series.View;
sv1.FillStyle.FillMode = FillMode.Solid;
//柱形上的标签
series.LabelsVisibility = DefaultBoolean.True;
series.Label.Border.Visible = false;
series.Label.BackColor = Color.Black;
series.Label.TextColor = Color.White;
series.Label.LineVisible = false;
series.Label.LineLength = 4;
return series;
}
private void CreateChart(DataTable dt)
{
#region Series
//创建几个图形的对象
Series series1 = CreateSeries("员工人数", ViewType.Line, dt, 0);
series1.Name = "员工人数";
Series series2 = CreateSeries("人均月薪", ViewType.Line, dt, 1);
series2.Name = "人均月薪";
//Series series3 = CreateSeries("成本TEU", ViewType.Spline, dt, 2);
//Series series4 = CreateSeries("人均生产率", ViewType.Spline, dt, 3);
//Series series5 = CreateSeries("占2005年3月人数比例", ViewType.Spline, dt, 4);
#endregion
chartControl1.Series.Clear();
List<Series> list = new List<Series>() { series1, series2 };
//, series2, series3, series4, series5
chartControl1.Series.AddRange(list.ToArray());
chartControl1.Legend.Visible = true;//标签
chartControl1.Legend.BackColor = Color.Black;//标签的背景颜色
chartControl1.Legend.AlignmentHorizontal = LegendAlignmentHorizontal.Center;//标签左右对齐方式
chartControl1.Legend.AlignmentVertical = LegendAlignmentVertical.TopOutside;//标签上下对齐方式
chartControl1.Legend.Direction = LegendDirection.LeftToRight;//标签的排列方式
chartControl1.Legend.TextColor = Color.White;//标签的字体颜色
//设置网格线
XYDiagram diagram = (XYDiagram)chartControl1.Diagram;
diagram.AxisY.GridLines.Visible = true;//Y轴网格线
//diagram.AxisX.GridLines.Visible = true;
diagram.AxisY.GridLines.Color = Color.Gray;//Y轴网格线的颜色
//diagram.AxisY.GridLines.LineStyle=
ChartTitle title = new ChartTitle();
title.Visible = false;
title.WordWrap = true;
title.Text = "数据看板";//标题内容
title.TextColor = System.Drawing.Color.LightPink;//字体颜色
title.Font = new Font("Tahoma", 15);//字体类型字号
title.Dock = ChartTitleDockStyle.Top;//标题上下对齐方式
title.Alignment = StringAlignment.Center;//标题左右对齐方式
chartControl1.Titles.Clear();//清理标题
chartControl1.Titles.Add(title);//加载标题
//diagram.AxisX.GridLines.Color = Color.LightGray;
//diagram.AxisY.GridSpacing = 0;
//chartControl1.ChartAreas[i].AxisX.MajorGrid.Interval = 2;//网格间隔
//chartControl1.ChartAreas[i].AxisX.MinorGrid.Interval = 2;
//chartControl1.ChartAreas[i].AxisY.MajorGrid.LineColor = Color.Blue;
//chartControl1.ChartAreas[i].AxisY.MajorGrid.Interval = 2;
//chartControl1.ChartAreas[i].AxisY.MinorGrid.Interval = 2;
chartControl1.SeriesTemplate.LabelsVisibility = DefaultBoolean.True;
for (int i = 0; i < list.Count; i++)
{
list[i].View.Color = colorList[i];
//CreateAxisY(list[i]);
}
series1.ValueScaleType = ScaleType.Numerical;
//定义线条上点的标识形状是否需要
((LineSeriesView)series1.View).LineMarkerOptions.BorderVisible = false;
((LineSeriesView)series1.View).MarkerVisibility = DefaultBoolean.True;
//定义线条上点的标识形状
((LineSeriesView)series1.View).LineMarkerOptions.Kind = MarkerKind.Diamond;
//不显示X、Y轴上面的交点的值
((PointSeriesLabel)series1.Label).LineVisible = true;
//线条的类型,虚线,实线
((LineSeriesView)series1.View).LineStyle.DashStyle = DashStyle.Solid;
((LineSeriesView)series2.View).MarkerVisibility = DefaultBoolean.True;
((LineSeriesView)series2.View).LineMarkerOptions.Kind = MarkerKind.Diamond;
diagram.AxisX.Color = System.Drawing.Color.White;
diagram.AxisX.Color = System.Drawing.Color.White;
}
private Series CreateSeries(string caption, ViewType viewType, DataTable dt, int rowIndex)
{
Series series = new Series(caption, viewType);
for (int i = 1; i < dt.Columns.Count; i++)
{
string argument = dt.Columns[i].ColumnName;//参数名称
decimal value = (decimal)dt.Rows[rowIndex][i];//参数值
series.Points.Add(new SeriesPoint(argument, value));
}
//必须设置ArgumentScaleType的类型,否则显示会转换为日期格式,导致不是希望的格式显示
//也就是说,显示字符串的参数,必须设置类型为ScaleType.Qualitative
series.ArgumentScaleType = ScaleType.Qualitative;
series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;//显示曲线标注数值
series.Label.BackColor = Color.Black;//曲线标注的颜色
series.Label.Border.Visible = false;//曲线标注的边框
series.Label.TextColor = Color.LightGray;//曲线标注的字体颜色
return series;
}
private SecondaryAxisY CreateAxisY(Series series)
{
SecondaryAxisY myAxis = new SecondaryAxisY(series.Name);
((XYDiagram)chartControl1.Diagram).SecondaryAxesY.Add(myAxis);
((LineSeriesView)series.View).AxisY = myAxis;
myAxis.Title.Text = series.Name;
myAxis.Title.Alignment = StringAlignment.Far; //顶部对齐
myAxis.Title.Visible = true; //显示标题
myAxis.Title.Font = new Font("宋体", 9.0f);
Color color = series.View.Color;//设置坐标的颜色和图表线条颜色一致
myAxis.Title.TextColor = color;
myAxis.Label.TextColor = color;
myAxis.Color = color;
return myAxis;
}
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
#region 控件随窗体变大的类
public class CtrlAutoSize
{
System.Windows.Forms.Form thisForm;
private float x, y;
float newx, newy;
public CtrlAutoSize(System.Windows.Forms.Form form)
{
thisForm = form;
x = thisForm.Width;
y = thisForm.Height;
}
public void setTag(Control cons)
{
foreach (Control con in cons.Controls)
{
con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size;
if (con.Controls.Count > 0)
{
setTag(con);
}
}
}
public void setControls(Control cons)
{
newx = cons.Width / x;
newy = cons.Height / y;
foreach (Control con in cons.Controls)
{
string[] mytag = con.Tag.ToString().Split(new char[] { (':') });
float a = Convert.ToSingle(mytag[0]) * newx;
con.Width = (int)a;
a = Convert.ToSingle(mytag[1]) * newy;
con.Height = (int)a;
a = Convert.ToSingle(mytag[2]) * newx;
con.Left = (int)a;
a = Convert.ToSingle(mytag[3]) * newy;
con.Top = (int)a;
Single currentSize = Convert.ToSingle(mytag[4]) * newy;
con.Font = new System.Drawing.Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
if (con.Controls.Count > 0)
{
setControls(con);
}
}
}
}
#endregion
private void label1_Resize(object sender, EventArgs e)
{
autosize.setControls(this);
}
private void timer1_Tick(object sender, EventArgs e)
{
this.label31.Text = DateTime.Now.ToString();
//每次回调函数都会用DateTime.Now.ToString();获取现在时间,存到Label2中
}
private void BindData()
{
//label42 = GetWorkPlanQty();
}
private void FormWatch1_Load(object sender, EventArgs e)
{
}
}
public class ChartData
{
}
}