华恒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

5 months ago
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using DevExpress.XtraCharts;
  10. using DevExpress.Utils;
  11. namespace ICSSoft.Frame.WatchPanel
  12. {
  13. public partial class FormWatch1 : Form
  14. {
  15. CtrlAutoSize autosize;
  16. public FormWatch1(WatchData data)
  17. {
  18. InitializeComponent();
  19. this.WindowState = FormWindowState.Maximized;
  20. this.Resize += new EventHandler(label1_Resize);
  21. autosize = new CtrlAutoSize(this); //实例化对象并传递"this"
  22. autosize.setTag(this); //控件随窗体变大
  23. DataTable dt = CreateData();
  24. this.chartControl1.DataSource = dt;
  25. CreateChart(dt); //创建折线图
  26. List<string> list = new List<string>();
  27. this.chartControl2.DataSource = dt;
  28. CreatChart2(dt,list); //创建柱形图
  29. }
  30. List<System.Drawing.Color> colorList = new List<Color> { Color.Yellow,Color.Blue, Color.Gray, Color.White, Color.Yellow };
  31. private Point mPoint = new Point();
  32. private void Form1_MouseDown(object sender, MouseEventArgs e)
  33. {
  34. mPoint.X = e.X;
  35. mPoint.Y = e.Y;
  36. }
  37. private void Form1_MouseMove(object sender, MouseEventArgs e)
  38. {
  39. if (e.Button == MouseButtons.Left)
  40. {
  41. Point myPosittion = MousePosition;
  42. myPosittion.Offset(-mPoint.X, -mPoint.Y);
  43. Location = myPosittion;
  44. }
  45. }
  46. private DataTable CreateData()
  47. {
  48. DataTable dt = new DataTable();
  49. dt.Columns.Add(new DataColumn("类型"));
  50. dt.Columns.Add(new DataColumn("2005-1月", typeof(decimal)));
  51. dt.Columns.Add(new DataColumn("2005-2月", typeof(decimal)));
  52. dt.Columns.Add(new DataColumn("2005-3月", typeof(decimal)));
  53. dt.Columns.Add(new DataColumn("2005-4月", typeof(decimal)));
  54. dt.Columns.Add(new DataColumn("2005-5月", typeof(decimal)));
  55. dt.Columns.Add(new DataColumn("2005-6月", typeof(decimal)));
  56. dt.Rows.Add(new object[] { "员工人数", 437, 437, 414, 397, 387, 378 });
  57. dt.Rows.Add(new object[] { "人均月薪", 3964, 3961, 3979, 3974, 3967, 3972 });
  58. dt.Rows.Add(new object[] { "成本TEU", 3104, 1339, 3595.8, 3154.5, 2499.8, 3026 });
  59. dt.Rows.Add(new object[] { "人均生产率", 7.1, 3.06, 8.69, 7.95, 6.46, 8.01 });
  60. dt.Rows.Add(new object[] { "占2005年3月人数比例", 1.06, 1.06, 1, 0.96, 0.93, 0.91 });
  61. return dt;
  62. }
  63. private void CreatChart2(DataTable dt,List<string> list)
  64. {
  65. chartControl2.Series.Clear();
  66. //// 柱状图里的第一个柱
  67. //Series Series1 = CreateSeries2("员工人数", ViewType.Bar, dt, 0);
  68. ////Series Series1 = new Series("员工人数", ViewType.Bar);
  69. //Series1.DataSource = dt;
  70. //Series1.ArgumentScaleType = ScaleType.Qualitative;
  71. //Series1.ArgumentDataMember = "2005-1月";
  72. //// 以哪个字段进行显示
  73. //Series1.View.Color = Color.Yellow;
  74. //Series1.ValueScaleType = ScaleType.Numerical;
  75. //// 柱状图里的柱的取值字段
  76. //Series1.ValueDataMembers.AddRange(new string[] { "2005-1月" });
  77. // 柱状图里的第一个柱
  78. Series Series1 = CreateSeries2("员工人数", ViewType.Bar, dt, 0);
  79. //Series Series1 = new Series("员工人数", ViewType.Bar);
  80. Series1.DataSource = dt;
  81. Series1.ArgumentScaleType = ScaleType.Qualitative;
  82. //Series1.ArgumentDataMember = "2005-1月";
  83. // 以哪个字段进行显示
  84. Series1.View.Color= Color.Yellow;
  85. Series1.ValueScaleType = ScaleType.Numerical;
  86. // 柱状图里的柱的取值字段
  87. //Series1.ValueDataMembers.AddRange(new string[] { "2005-2月" });
  88. // 柱状图里的第二柱
  89. Series Series2 = CreateSeries2("人均月薪", ViewType.Bar, dt, 1);
  90. Series2.Label.TextColor = Color.Yellow;
  91. //Series Series2 = new Series("", ViewType.Bar);
  92. Series2.DataSource = dt;
  93. Series2.View.Color = Color.Lime;
  94. Series2.ArgumentScaleType = ScaleType.Qualitative;
  95. //Series2.Vi = ;
  96. //Series2.ArgumentDataMember = "2005-2月";
  97. Series2.ValueScaleType = ScaleType.Numerical;
  98. //Series2.ValueDataMembers.AddRange(new string[] { "2005-2月" });
  99. chartControl2.Series.Add(Series1);
  100. chartControl2.Series.Add(Series2);
  101. XYDiagram diagram = (XYDiagram)chartControl2.Diagram;
  102. diagram.AxisY.GridLines.Visible = true;//Y轴网格线
  103. //diagram.AxisX.GridLines.Visible = true;
  104. diagram.AxisY.GridLines.Color = Color.Gray;//Y轴网格线的颜色
  105. }
  106. private Series CreateSeries2(string caption, ViewType viewType, DataTable dt, int rowIndex)
  107. {
  108. Series series = new Series(caption, viewType);
  109. for (int i = 1; i < dt.Columns.Count; i++)
  110. {
  111. string argument = dt.Columns[i].ColumnName;//参数名称
  112. decimal value = (decimal)dt.Rows[rowIndex][i];//参数值
  113. series.Points.Add(new SeriesPoint(argument, value));
  114. }
  115. //柱子显示纯色
  116. BarSeriesView sv1 = (BarSeriesView)series.View;
  117. sv1.FillStyle.FillMode = FillMode.Solid;
  118. //柱形上的标签
  119. series.LabelsVisibility = DefaultBoolean.True;
  120. series.Label.Border.Visible = false;
  121. series.Label.BackColor = Color.Black;
  122. series.Label.TextColor = Color.White;
  123. series.Label.LineVisible = false;
  124. series.Label.LineLength = 4;
  125. return series;
  126. }
  127. private void CreateChart(DataTable dt)
  128. {
  129. #region Series
  130. //创建几个图形的对象
  131. Series series1 = CreateSeries("员工人数", ViewType.Line, dt, 0);
  132. series1.Name = "员工人数";
  133. Series series2 = CreateSeries("人均月薪", ViewType.Line, dt, 1);
  134. series2.Name = "人均月薪";
  135. //Series series3 = CreateSeries("成本TEU", ViewType.Spline, dt, 2);
  136. //Series series4 = CreateSeries("人均生产率", ViewType.Spline, dt, 3);
  137. //Series series5 = CreateSeries("占2005年3月人数比例", ViewType.Spline, dt, 4);
  138. #endregion
  139. chartControl1.Series.Clear();
  140. List<Series> list = new List<Series>() { series1, series2 };
  141. //, series2, series3, series4, series5
  142. chartControl1.Series.AddRange(list.ToArray());
  143. chartControl1.Legend.Visible = true;//标签
  144. chartControl1.Legend.BackColor = Color.Black;//标签的背景颜色
  145. chartControl1.Legend.AlignmentHorizontal = LegendAlignmentHorizontal.Center;//标签左右对齐方式
  146. chartControl1.Legend.AlignmentVertical = LegendAlignmentVertical.TopOutside;//标签上下对齐方式
  147. chartControl1.Legend.Direction = LegendDirection.LeftToRight;//标签的排列方式
  148. chartControl1.Legend.TextColor = Color.White;//标签的字体颜色
  149. //设置网格线
  150. XYDiagram diagram = (XYDiagram)chartControl1.Diagram;
  151. diagram.AxisY.GridLines.Visible = true;//Y轴网格线
  152. //diagram.AxisX.GridLines.Visible = true;
  153. diagram.AxisY.GridLines.Color = Color.Gray;//Y轴网格线的颜色
  154. //diagram.AxisY.GridLines.LineStyle=
  155. ChartTitle title = new ChartTitle();
  156. title.Visible = false;
  157. title.WordWrap = true;
  158. title.Text = "数据看板";//标题内容
  159. title.TextColor = System.Drawing.Color.LightPink;//字体颜色
  160. title.Font = new Font("Tahoma", 15);//字体类型字号
  161. title.Dock = ChartTitleDockStyle.Top;//标题上下对齐方式
  162. title.Alignment = StringAlignment.Center;//标题左右对齐方式
  163. chartControl1.Titles.Clear();//清理标题
  164. chartControl1.Titles.Add(title);//加载标题
  165. //diagram.AxisX.GridLines.Color = Color.LightGray;
  166. //diagram.AxisY.GridSpacing = 0;
  167. //chartControl1.ChartAreas[i].AxisX.MajorGrid.Interval = 2;//网格间隔
  168. //chartControl1.ChartAreas[i].AxisX.MinorGrid.Interval = 2;
  169. //chartControl1.ChartAreas[i].AxisY.MajorGrid.LineColor = Color.Blue;
  170. //chartControl1.ChartAreas[i].AxisY.MajorGrid.Interval = 2;
  171. //chartControl1.ChartAreas[i].AxisY.MinorGrid.Interval = 2;
  172. chartControl1.SeriesTemplate.LabelsVisibility = DefaultBoolean.True;
  173. for (int i = 0; i < list.Count; i++)
  174. {
  175. list[i].View.Color = colorList[i];
  176. //CreateAxisY(list[i]);
  177. }
  178. series1.ValueScaleType = ScaleType.Numerical;
  179. //定义线条上点的标识形状是否需要
  180. ((LineSeriesView)series1.View).LineMarkerOptions.BorderVisible = false;
  181. ((LineSeriesView)series1.View).MarkerVisibility = DefaultBoolean.True;
  182. //定义线条上点的标识形状
  183. ((LineSeriesView)series1.View).LineMarkerOptions.Kind = MarkerKind.Diamond;
  184. //不显示X、Y轴上面的交点的值
  185. ((PointSeriesLabel)series1.Label).LineVisible = true;
  186. //线条的类型,虚线,实线
  187. ((LineSeriesView)series1.View).LineStyle.DashStyle = DashStyle.Solid;
  188. ((LineSeriesView)series2.View).MarkerVisibility = DefaultBoolean.True;
  189. ((LineSeriesView)series2.View).LineMarkerOptions.Kind = MarkerKind.Diamond;
  190. diagram.AxisX.Color = System.Drawing.Color.White;
  191. diagram.AxisX.Color = System.Drawing.Color.White;
  192. }
  193. private Series CreateSeries(string caption, ViewType viewType, DataTable dt, int rowIndex)
  194. {
  195. Series series = new Series(caption, viewType);
  196. for (int i = 1; i < dt.Columns.Count; i++)
  197. {
  198. string argument = dt.Columns[i].ColumnName;//参数名称
  199. decimal value = (decimal)dt.Rows[rowIndex][i];//参数值
  200. series.Points.Add(new SeriesPoint(argument, value));
  201. }
  202. //必须设置ArgumentScaleType的类型,否则显示会转换为日期格式,导致不是希望的格式显示
  203. //也就是说,显示字符串的参数,必须设置类型为ScaleType.Qualitative
  204. series.ArgumentScaleType = ScaleType.Qualitative;
  205. series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;//显示曲线标注数值
  206. series.Label.BackColor = Color.Black;//曲线标注的颜色
  207. series.Label.Border.Visible = false;//曲线标注的边框
  208. series.Label.TextColor = Color.LightGray;//曲线标注的字体颜色
  209. return series;
  210. }
  211. private SecondaryAxisY CreateAxisY(Series series)
  212. {
  213. SecondaryAxisY myAxis = new SecondaryAxisY(series.Name);
  214. ((XYDiagram)chartControl1.Diagram).SecondaryAxesY.Add(myAxis);
  215. ((LineSeriesView)series.View).AxisY = myAxis;
  216. myAxis.Title.Text = series.Name;
  217. myAxis.Title.Alignment = StringAlignment.Far; //顶部对齐
  218. myAxis.Title.Visible = true; //显示标题
  219. myAxis.Title.Font = new Font("宋体", 9.0f);
  220. Color color = series.View.Color;//设置坐标的颜色和图表线条颜色一致
  221. myAxis.Title.TextColor = color;
  222. myAxis.Label.TextColor = color;
  223. myAxis.Color = color;
  224. return myAxis;
  225. }
  226. private void button1_Click(object sender, EventArgs e)
  227. {
  228. this.Close();
  229. }
  230. #region 控件随窗体变大的类
  231. public class CtrlAutoSize
  232. {
  233. System.Windows.Forms.Form thisForm;
  234. private float x, y;
  235. float newx, newy;
  236. public CtrlAutoSize(System.Windows.Forms.Form form)
  237. {
  238. thisForm = form;
  239. x = thisForm.Width;
  240. y = thisForm.Height;
  241. }
  242. public void setTag(Control cons)
  243. {
  244. foreach (Control con in cons.Controls)
  245. {
  246. con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size;
  247. if (con.Controls.Count > 0)
  248. {
  249. setTag(con);
  250. }
  251. }
  252. }
  253. public void setControls(Control cons)
  254. {
  255. newx = cons.Width / x;
  256. newy = cons.Height / y;
  257. foreach (Control con in cons.Controls)
  258. {
  259. string[] mytag = con.Tag.ToString().Split(new char[] { (':') });
  260. float a = Convert.ToSingle(mytag[0]) * newx;
  261. con.Width = (int)a;
  262. a = Convert.ToSingle(mytag[1]) * newy;
  263. con.Height = (int)a;
  264. a = Convert.ToSingle(mytag[2]) * newx;
  265. con.Left = (int)a;
  266. a = Convert.ToSingle(mytag[3]) * newy;
  267. con.Top = (int)a;
  268. Single currentSize = Convert.ToSingle(mytag[4]) * newy;
  269. con.Font = new System.Drawing.Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit);
  270. if (con.Controls.Count > 0)
  271. {
  272. setControls(con);
  273. }
  274. }
  275. }
  276. }
  277. #endregion
  278. private void label1_Resize(object sender, EventArgs e)
  279. {
  280. autosize.setControls(this);
  281. }
  282. private void timer1_Tick(object sender, EventArgs e)
  283. {
  284. this.label31.Text = DateTime.Now.ToString();
  285. //每次回调函数都会用DateTime.Now.ToString();获取现在时间,存到Label2中
  286. }
  287. private void BindData()
  288. {
  289. //label42 = GetWorkPlanQty();
  290. }
  291. private void FormWatch1_Load(object sender, EventArgs e)
  292. {
  293. }
  294. }
  295. public class ChartData
  296. {
  297. }
  298. }