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 list = new List(); this.chartControl2.DataSource = dt; CreatChart2(dt,list); //创建柱形图 } List colorList = new List { 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 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 list = new List() { 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 { } }