FormNode.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Data.Common;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. using DevExpress.XtraGrid.Columns;
  12. using ProjectBase.Controls;
  13. using ProjectBase.Data.BaseDAL;
  14. using ProjectBase.Data.Logs;
  15. using SIMDP.BLL;
  16. using SIMDP.Model;
  17. using SIMDP.Util;
  18. namespace SIMDP
  19. {
  20. public partial class FormNode : BaseDock
  21. {
  22. //BlPlcInfo blPlcInfo = new BlPlcInfo();
  23. //BlDataGroup blDataGroup = new BlDataGroup();
  24. //BlDataPoint bLDataPoint = new BlDataPoint();
  25. private Dictionary<string, string> columnNameAlias = new Dictionary<string, string>();//GridView中字段别名字典集合
  26. TreeNode choiceNode; // 选中节点信息
  27. DbTransaction trans;
  28. public FormNode()
  29. {
  30. InitializeComponent();
  31. InitTreeNode();
  32. }
  33. /// <summary>
  34. /// 初始化树
  35. /// </summary>
  36. private void InitTreeNode()
  37. {
  38. this.tree_Node.BeginUpdate();
  39. this.tree_Node.Nodes.Clear();
  40. this.tree_Node.ImageList = this.imageList1;
  41. List<MoPlcInfo> plcInfoList = BLLFactory<BlPlcInfo>.Instance.GetAll();
  42. foreach (MoPlcInfo plcInfo in plcInfoList)
  43. {
  44. if (plcInfo != null)
  45. {
  46. TreeNode rootNode = new TreeNode(); //根节点
  47. rootNode.Text = plcInfo.PlcName;
  48. rootNode.Name = plcInfo.PlcId.ToString();
  49. rootNode.ImageIndex = 0;
  50. rootNode.SelectedImageIndex = 0;
  51. this.tree_Node.Nodes.Add(rootNode);
  52. List<MoDataGroup> dataGroupList = BLLFactory<BlDataGroup>.Instance.Find(string.Format(" data_group_plc_id = {0}", plcInfo.PlcId.ToString()));
  53. foreach (MoDataGroup dataGroup in dataGroupList)
  54. {
  55. TreeNode oneNode = new TreeNode(); //一级节点
  56. oneNode.Text = dataGroup.DataGroupName;
  57. oneNode.Name = dataGroup.DataGroupId.ToString();
  58. oneNode.ImageIndex = 1;
  59. oneNode.SelectedImageIndex = 1;
  60. rootNode.Nodes.Add(oneNode);
  61. List<MoDataPoint> dataPointsList = BLLFactory<BlDataPoint>.Instance.Find(string.Format(" data_point_plc_id = {0} And data_point_group_id = {1}", plcInfo.PlcId.ToString(), dataGroup.DataGroupId.ToString()));
  62. foreach (MoDataPoint dataPoint in dataPointsList)
  63. {
  64. TreeNode twoNode = new TreeNode(); //二级节点
  65. twoNode.Text = dataPoint.DataPointName;
  66. twoNode.Name = dataPoint.DataPointId.ToString();
  67. twoNode.ImageIndex = 2;
  68. twoNode.SelectedImageIndex = 2;
  69. oneNode.Nodes.Add(twoNode);
  70. }
  71. }
  72. }
  73. }
  74. this.tree_Node.ExpandAll();
  75. this.tree_Node.EndUpdate();
  76. }
  77. /// <summary>
  78. /// 选中节点后显示
  79. /// </summary>
  80. /// <param name="sender"></param>
  81. /// <param name="e"></param>
  82. private void tree_Node_AfterSelect(object sender, TreeViewEventArgs e)
  83. {
  84. choiceNode = e.Node;
  85. if (0 == e.Node.Level)
  86. {
  87. string plcId = e.Node.Name;
  88. if (!string.IsNullOrEmpty(plcId))
  89. {
  90. this.gridView_Node.Columns.Clear();
  91. #region 添加别名解析
  92. columnNameAlias.Clear();
  93. columnNameAlias.Add("DataGroupPlcId", "数据组所属PLC编码");
  94. columnNameAlias.Add("DataGroupId", "数据组编码");
  95. columnNameAlias.Add("DataGroupName", "数据组名称");
  96. columnNameAlias.Add("DataGroupType", "数据组类型");
  97. foreach (var item in columnNameAlias)
  98. {
  99. GridColumn col = new GridColumn();
  100. col.Caption = item.Value;
  101. col.FieldName = item.Key;
  102. col.Visible = true;
  103. this.gridView_Node.Columns.Add(col);
  104. }
  105. #endregion
  106. #region 添加修改和删除操作
  107. //DevExpress.XtraEditors.Repository.RepositoryItemHyperLinkEdit repositoryEditGroup = new DevExpress.XtraEditors.Repository.RepositoryItemHyperLinkEdit();
  108. //repositoryEditGroup.Name = "repositoryEditGroup";
  109. //repositoryEditGroup.NullText = "修改";
  110. //repositoryEditGroup.Click += new System.EventHandler(RepositoryEditGroup_Click);
  111. //DevExpress.XtraGrid.Columns.GridColumn gridColumn_Edit = new GridColumn();
  112. //gridColumn_Edit.Caption = "修改操作";
  113. //gridColumn_Edit.Name = "gridColumn_Edit";
  114. //gridColumn_Edit.Visible = true;
  115. //gridColumn_Edit.ColumnEdit = repositoryEditGroup;
  116. //this.gridView_Node.Columns.Add(gridColumn_Edit);
  117. //DevExpress.XtraEditors.Repository.RepositoryItemHyperLinkEdit repositoryDeleteGroup = new DevExpress.XtraEditors.Repository.RepositoryItemHyperLinkEdit();
  118. //repositoryDeleteGroup.Name = "repositoryDeleteGroup";
  119. //repositoryDeleteGroup.NullText = "删除";
  120. //repositoryDeleteGroup.Click += new System.EventHandler(RepositoryDeleteGroup_Click);
  121. //DevExpress.XtraGrid.Columns.GridColumn gridColumn_Delete = new GridColumn();
  122. //gridColumn_Delete.Caption = "删除操作";
  123. //gridColumn_Delete.Name = "gridColumn_Delete";
  124. //gridColumn_Delete.Visible = true;
  125. //gridColumn_Delete.ColumnEdit = repositoryDeleteGroup;
  126. //this.gridView_Node.Columns.Add(gridColumn_Delete);
  127. //this.gridControl_Node.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { repositoryEditGroup, repositoryDeleteGroup });
  128. #endregion
  129. for (int i = 0; i < this.gridView_Node.Columns.Count; i++) //设置每列内容居中显示
  130. {
  131. this.gridView_Node.Columns[i].AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
  132. }
  133. this.gridControl_Node.DataSource = BLLFactory<BlDataGroup>.Instance.Find(string.Format(" data_group_plc_id = {0}", plcId));
  134. this.gridControl_Node.RefreshDataSource();
  135. }
  136. }
  137. else if (1 == e.Node.Level)
  138. {
  139. string plcId = e.Node.Parent.Name;
  140. string groupId = e.Node.Name;
  141. if (!string.IsNullOrEmpty(groupId))
  142. {
  143. this.gridView_Node.Columns.Clear();
  144. #region 添加别名解析
  145. columnNameAlias.Clear();
  146. columnNameAlias.Add("DataPointPlcId", "数据点PLC编码");
  147. columnNameAlias.Add("DataPointGroupId", "数据点采集组编码");
  148. columnNameAlias.Add("DataPointId", "数据点编码");
  149. columnNameAlias.Add("DataPointName", "数据点名称");
  150. columnNameAlias.Add("DataPointType", "数据点类型");
  151. columnNameAlias.Add("DataPointSource", "数据点PLC变量名");
  152. columnNameAlias.Add("DataProc", "数据点执行逻辑");
  153. foreach (var item in columnNameAlias)
  154. {
  155. GridColumn col = new GridColumn();
  156. col.Caption = item.Value;
  157. col.FieldName = item.Key;
  158. col.Visible = true;
  159. this.gridView_Node.Columns.Add(col);
  160. }
  161. #endregion
  162. for (int i = 0; i < this.gridView_Node.Columns.Count; i++) //设置每列内容居中显示
  163. {
  164. this.gridView_Node.Columns[i].AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
  165. }
  166. this.gridControl_Node.DataSource = BLLFactory<BlDataPoint>.Instance.Find(string.Format(" data_point_plc_id = {0} And data_point_group_id = {1}", plcId, groupId));
  167. this.gridControl_Node.RefreshDataSource();
  168. }
  169. }
  170. else if (2 == e.Node.Level)
  171. {
  172. string plcId = e.Node.Parent.Parent.Name;
  173. string groupId = e.Node.Parent.Name;
  174. string pointId = e.Node.Name;
  175. if (!string.IsNullOrEmpty(pointId))
  176. {
  177. this.gridView_Node.Columns.Clear();
  178. #region 添加别名解析
  179. columnNameAlias.Clear();
  180. columnNameAlias.Add("DataPointPlcId", "数据点PLC编码");
  181. columnNameAlias.Add("DataPointGroupId", "数据点采集组编码");
  182. columnNameAlias.Add("DataPointId", "数据点编码");
  183. columnNameAlias.Add("DataPointName", "数据点名称");
  184. columnNameAlias.Add("DataPointType", "数据点类型");
  185. columnNameAlias.Add("DataPointSource", "数据点PLC变量名");
  186. columnNameAlias.Add("DataProc", "数据点执行逻辑");
  187. foreach (var item in columnNameAlias)
  188. {
  189. GridColumn col = new GridColumn();
  190. col.Caption = item.Value;
  191. col.FieldName = item.Key;
  192. col.Visible = true;
  193. this.gridView_Node.Columns.Add(col);
  194. }
  195. #endregion
  196. for (int i = 0; i < this.gridView_Node.Columns.Count; i++) //设置每列内容居中显示
  197. {
  198. this.gridView_Node.Columns[i].AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
  199. }
  200. this.gridControl_Node.DataSource = BLLFactory<BlDataPoint>.Instance.Find(string.Format(" data_point_plc_id = {0} And data_point_group_id = {1} And data_point_id = {2}", plcId, groupId, pointId));
  201. this.gridControl_Node.RefreshDataSource();
  202. }
  203. }
  204. }
  205. private void menuTree_Expand_Click(object sender, EventArgs e)
  206. {
  207. this.tree_Node.ExpandAll();
  208. }
  209. private void menuTree_Collapse_Click(object sender, EventArgs e)
  210. {
  211. this.tree_Node.CollapseAll();
  212. }
  213. private void menuTree_Refresh_Click(object sender, EventArgs e)
  214. {
  215. InitTreeNode();
  216. }
  217. private void menuTree_AddGroup_Click(object sender, EventArgs e)
  218. {
  219. if (BLLFactory<BlPlcInfo>.Instance.GetRecordCount()<=0)
  220. {
  221. DevExpress.XtraEditors.XtraMessageBox.Show("请先添加PLC配置信息");
  222. }
  223. if (choiceNode.Level == 0)
  224. {
  225. FormEditGroup editGroup = new FormEditGroup();
  226. editGroup.saveData += new FormEditGroup.save(InitTreeNode);
  227. editGroup.plcId = choiceNode.Name;
  228. editGroup.ShowDialog();
  229. }
  230. else
  231. {
  232. DevExpress.XtraEditors.XtraMessageBox.Show("请选中PLC配置信息的一个点!");
  233. }
  234. }
  235. private void menuTree_AddPoint_Click(object sender, EventArgs e)
  236. {
  237. if (BLLFactory<BlDataGroup>.Instance.GetRecordCount() <= 0)
  238. {
  239. DevExpress.XtraEditors.XtraMessageBox.Show("请先添加组信息");
  240. }
  241. if (choiceNode.Level == 1)
  242. {
  243. FormEditPoint editPoint = new FormEditPoint();
  244. editPoint.groupId = choiceNode.Name;
  245. editPoint.plcId = choiceNode.Parent.Name;
  246. editPoint.saveData += new FormEditPoint.save(InitTreeNode);
  247. editPoint.ShowDialog();
  248. }
  249. else
  250. {
  251. DevExpress.XtraEditors.XtraMessageBox.Show("请选中组!");
  252. }
  253. }
  254. private void gridView_Node_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
  255. {
  256. if (e.Info.IsRowIndicator && e.RowHandle >= 0)
  257. {
  258. e.Info.DisplayText = (e.RowHandle + 1).ToString();
  259. }
  260. }
  261. private void menuTree_Delete_Click(object sender, EventArgs e)
  262. {
  263. if (choiceNode == null)
  264. {
  265. DevExpress.XtraEditors.XtraMessageBox.Show("请选中要删除的记录。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  266. return;
  267. }
  268. if (choiceNode.Level == 0)
  269. {
  270. DevExpress.XtraEditors.XtraMessageBox.Show("不能删除PLC,请重新选择。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  271. return;
  272. }
  273. if (DevExpress.XtraEditors.XtraMessageBox.Show("删除此记录将影响规则配置,您确定删除选定的记录么?", "提示信息", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No)
  274. {
  275. return;
  276. }
  277. bool flag = false;
  278. using (trans = BLLFactory<BlDataGroup>.Instance.CreateTransaction())
  279. {
  280. try
  281. {
  282. if (choiceNode.Level == 1)
  283. {
  284. if (choiceNode.Nodes.Count > 0)
  285. {
  286. flag = BLLFactory<BlDataPoint>.Instance.DeleteByCondition(string.Format(" data_point_group_id = {0}", choiceNode.Name), trans);
  287. if (flag)
  288. {
  289. flag = BLLFactory<BlDataGroup>.Instance.Delete(choiceNode.Name, SysEnvironment.CurrentLoginID, trans);
  290. }
  291. }
  292. else
  293. {
  294. flag = BLLFactory<BlDataGroup>.Instance.Delete(choiceNode.Name, SysEnvironment.CurrentLoginID);
  295. }
  296. }
  297. else if (choiceNode.Level == 2)
  298. {
  299. flag = BLLFactory<BlDataPoint>.Instance.Delete(choiceNode.Name, SysEnvironment.CurrentLoginID);
  300. }
  301. trans.Commit();
  302. }
  303. catch (Exception ex)
  304. {
  305. trans.Rollback();
  306. DevExpress.XtraEditors.XtraMessageBox.Show("删除失败。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  307. LogHelper.log.Error(string.Format("删除数据库出现错误:{0}", ex));
  308. }
  309. }
  310. trans.Dispose();
  311. if (flag)
  312. {
  313. DevExpress.XtraEditors.XtraMessageBox.Show("删除成功。请在规则配置中作出相应的修改", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  314. InitTreeNode();
  315. }
  316. }
  317. private void gridView_Node_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
  318. {
  319. if (e.Column.FieldName == "DataGroupType")
  320. {
  321. e.DisplayText = SysEnvironment.dirDataGroupType.FirstOrDefault(p => p.Key == Convert.ToInt32(e.Value)).Value;
  322. }
  323. if (e.Column.FieldName == "DataPointType")
  324. {
  325. e.DisplayText = SysEnvironment.dirType.FirstOrDefault(p => p.Key == Convert.ToInt32(e.Value)).Value;
  326. }
  327. }
  328. private void gridControl_Node_DoubleClick(object sender, EventArgs e)
  329. {
  330. try
  331. {
  332. object selectRow = this.gridView_Node.GetFocusedRow();
  333. if (selectRow == null)
  334. {
  335. DevExpress.XtraEditors.XtraMessageBox.Show("请先选择一条记录!");
  336. return;
  337. }
  338. if (selectRow.GetType() == typeof(MoDataGroup))
  339. {
  340. MoDataGroup group = selectRow as MoDataGroup;
  341. FormEditGroup editGroup = new FormEditGroup();
  342. editGroup.saveData += new FormEditGroup.save(InitTreeNode);
  343. editGroup.group = group;
  344. editGroup.ShowDialog();
  345. }
  346. else if (selectRow.GetType() == typeof(MoDataPoint))
  347. {
  348. MoDataPoint point = selectRow as MoDataPoint;
  349. FormEditPoint editPoint = new FormEditPoint();
  350. editPoint.point = point;
  351. editPoint.saveData += new FormEditPoint.save(InitTreeNode);
  352. editPoint.ShowDialog();
  353. }
  354. }
  355. catch (Exception ex)
  356. {
  357. DevExpress.XtraEditors.XtraMessageBox.Show("双击修改时出现错误,请先选择一条记录", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  358. LogHelper.log.Error(ex);
  359. }
  360. }
  361. }
  362. }