From d7c384ceea90e2adeedcd8199fa651392ab655de Mon Sep 17 00:00:00 2001
From: duheng <2784771470@qq.com>
Date: 星期三, 25 九月 2024 16:30:23 +0800
Subject: [PATCH] 继续优化属性选择界面

---
 WinFrmUI/HStation.WinFrmUI.Basic/01-SysCatalogManage/SetSysPropForCatalogDlg.cs |  139 ++++++++++++++++++++++++++++++++++++----------
 1 files changed, 109 insertions(+), 30 deletions(-)

diff --git a/WinFrmUI/HStation.WinFrmUI.Basic/01-SysCatalogManage/SetSysPropForCatalogDlg.cs b/WinFrmUI/HStation.WinFrmUI.Basic/01-SysCatalogManage/SetSysPropForCatalogDlg.cs
index 7bed12c..35a0c8f 100644
--- a/WinFrmUI/HStation.WinFrmUI.Basic/01-SysCatalogManage/SetSysPropForCatalogDlg.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Basic/01-SysCatalogManage/SetSysPropForCatalogDlg.cs
@@ -1,5 +1,7 @@
-锘縰sing DevExpress.DataAccess.Wizard.Model;
+锘縰sing DevExpress.CodeParser;
+using DevExpress.DataAccess.Wizard.Model;
 using DevExpress.XtraEditors;
+using System;
 using Yw.Dto;
 
 namespace HStation.WinFrmUI.Basic
@@ -9,7 +11,10 @@
         public SetSysPropForCatalogDlg()
         {
             InitializeComponent();
-            this.gridView1.Columns["GroupName"].Group();
+            // this.treeList1.Columns["GroupName"].;
+            /*            this.gridView1.Columns["GroupName"].Group();
+
+            */
             repositoryItemCheckedComboBoxEdit1.DisplayMember = "Name";
             repositoryItemCheckedComboBoxEdit1.ValueMember = "ID";
         }
@@ -28,7 +33,11 @@
             foreach (var item in PropTreeList)
             {
                 repositoryItemCheckedComboBoxEdit1.Items.Clear();
-
+                var parent = new SysPropMappingViewModel();
+                parent.ID = item.ID;
+                parent.IsGroup = true;
+                parent.Name = item.Name;
+                _allBindingList.Add(parent);
                 if (item.PropList.Count > 0)
                 {
                     foreach (var child in item.PropList)
@@ -36,6 +45,7 @@
                         var model = new SysPropMappingViewModel();
                         model.GroupName = item.Name;
                         model.ID = child.ID;
+                        model.ParentID = item.ID;
                         model.Name = child.Name;
                         model.IsHave = child.Have;
                         model.IsNull = child.IsNull;
@@ -43,6 +53,7 @@
                         model.UnitName = child.UnitName;
                         model.Inherit = child.Inherit;
                         model.ChoiceList = child.ChoiceList;
+                        model.ChoiceIds = child.ChoiceList.Where(x => x.Have).Select(x => x.ID).ToList();
                         var stringList = child.ChoiceList.Where(x => x.Have == true).ToList().Select(x => x.ID.ToString()).ToList();
                         string result = string.Join(", ", stringList);
                         model.DisplayChoice = result;
@@ -51,7 +62,7 @@
                 }
             }
             this.sysCatalogPropViewModelBindingSource.DataSource = _allBindingList;
-            this.gridView1.ExpandAllGroups();
+            this.treeList1.ExpandAll();
         }
 
         // 瀹屾垚
@@ -84,9 +95,47 @@
             this.Close();
         }
 
-        private void gridView1_ShowingEditor(object sender, System.ComponentModel.CancelEventArgs e)
+        private void repositoryItemCheckedComboBoxEdit1_EditValueChanged(object sender, EventArgs e)
         {
-            var vm = this.gridView1.GetCurrentViewModel(_allBindingList);
+            try
+            {
+                var vm = this.treeList1.GetCurrentViewModel(_allBindingList);
+                if (vm == null)
+                    return;
+                var allselectList = repositoryItemCheckedComboBoxEdit1.GetCheckedItems();
+                var strList = Convert.ToString(allselectList);
+                if (strList != null && strList != string.Empty)
+                {
+                    if (strList.Contains(','))
+                    {
+                        string[] parts = strList.Split(',');
+                        List<long> longs = parts.Select(part => long.Parse(part.Trim())).ToList();
+
+                        vm.ChoiceIds = longs;
+                    }
+                    else
+                    {
+                        if (long.TryParse(strList, out long Id))
+                        {
+                            List<long> choiceId = new List<long>();
+                            choiceId.Add(Id);
+                            vm.ChoiceIds = choiceId;
+                        }
+                    }
+                }
+                else
+                {
+                    vm.ChoiceIds = new List<long>();
+                }
+            }
+            catch (Exception ex)
+            {
+            }
+        }
+
+        private void treeList1_ShowingEditor(object sender, System.ComponentModel.CancelEventArgs e)
+        {
+            var vm = this.treeList1.GetCurrentViewModel(_allBindingList);
             if (vm == null)
             {
                 return;
@@ -95,49 +144,79 @@
             {
                 e.Cancel = true;
             }
-            if (gridView1.FocusedColumn.Name == "colPropChoice")
+            if (vm.IsGroup)
+            {
+                e.Cancel = true;
+            }
+            if (treeList1.FocusedColumn.Name == "colPropChoice")
             {
                 repositoryItemCheckedComboBoxEdit1.Items.Clear();
                 repositoryItemCheckedComboBoxEdit1.DataSource = vm.ChoiceList;
             }
         }
 
-        private void gridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
+        private void treeList1_CustomDrawNodeCell(object sender, DevExpress.XtraTreeList.CustomDrawNodeCellEventArgs e)
         {
-            var gridView = sender as DevExpress.XtraGrid.Views.Grid.GridView;
-            if (gridView != null)
+            if (e.Node != null)
             {
-                foreach (var item in _allBindingList)
+                string Inherit = e.Node.GetValue("Inherit").ToString();
+                string isGroup = e.Node.GetValue("IsGroup").ToString();
+                if (Inherit == "True")
                 {
-                    int index = _allBindingList.IndexOf(item);
-                    if (gridView.GetRowHandle(index) == e.RowHandle)
-                    {
-                        if (item.Inherit)
-                        {
-                            e.Appearance.BackColor = Color.Gray;
-                        }
-                        break;
-                    }
+                    e.Appearance.BackColor = Color.DarkGray;
+                }
+                if (isGroup == "True")
+                {
+                    e.Appearance.BackColor = Color.Gainsboro;
                 }
             }
         }
 
-        private void repositoryItemCheckedComboBoxEdit1_EditValueChanged(object sender, EventArgs e)
+        private void treeList1_BeforeCheckNode(object sender, DevExpress.XtraTreeList.CheckNodeEventArgs e)
         {
-            try
+            string isGroup = e.Node.GetValue("Inherit").ToString();
+            if (isGroup == "True")
             {
-                var allselectList = repositoryItemCheckedComboBoxEdit1.GetCheckedItems();
-                string[] parts = Convert.ToString(allselectList).Split(',');
-                List<long> longs = parts.Select(part => long.Parse(part.Trim())).ToList();
-                var vm = this.gridView1.GetCurrentViewModel(_allBindingList);
-                if (vm != null)
+                e.State = CheckState.Unchecked;
+            }
+            else
+            {
+                if (e.PrevState == CheckState.Checked)
                 {
-                    vm.ChoiceIds = longs;
+                    e.State = CheckState.Unchecked;
+                }
+                else
+                {
+                    e.State = CheckState.Checked;
                 }
             }
-            catch (Exception ex)
+        }
+
+        private void treeList1_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)
+        {
+            SetCheckedChildNodes(e.Node, e.Node.CheckState, e);
+         }
+
+        #region 璁剧疆瀛愯妭鐐圭姸鎬�
+
+        private void SetCheckedChildNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, CheckState check, DevExpress.XtraTreeList.NodeEventArgs e)
+        {
+            for (int i = 0; i < node.Nodes.Count; i++)
             {
+                string Inherit = node.Nodes[i].GetValue("Inherit").ToString();
+                if (Inherit == "False")
+                {
+                    node.Nodes[i].CheckState = check;
+                    SetCheckedChildNodes(node.Nodes[i], check, e);
+                }
+                else if (Inherit == "True")
+                {
+                    node.Nodes[i].CheckState = CheckState.Checked;
+                    SetCheckedChildNodes(node.Nodes[i], check, e);
+                 }
             }
         }
-    }
+
+        #endregion 璁剧疆瀛愯妭鐐圭姸鎬�
+      }
 }
\ No newline at end of file

--
Gitblit v1.9.3