【金蝶K3Cloud】 樹形控件


  1 樹形控件添加到動態表單(或單據等)界面上之后,通過重載界面插件的如下兩個事件實現功能:
  2 1. TreeLoadData 事件:在此事件中構建樹節點
  3 2. TreeNodeClick 事件:在此事件中響應用戶點擊樹節點動作
  4 
  5 如下代碼演示如何在基礎資料的列表界面,如何自行構建左邊的分組樹節點;用戶點擊分組之后,如何過濾基礎資料數據:
  6 
  7 using System;
  8 using System.Collections.Generic;
  9 using System.Linq;
 10 using System.Text;
 11 using System.ComponentModel;
 12 using Kingdee.BOS;
 13 using Kingdee.BOS.Util;
 14 using Kingdee.BOS.Core;
 15 using Kingdee.BOS.Core.DynamicForm.PlugIn;
 16 using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
 17 using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
 18 using Kingdee.BOS.Core.List;
 19 using Kingdee.BOS.Core.List.PlugIn;
 20 using Kingdee.BOS.Core.List.PlugIn.Args;
 21 using Kingdee.BOS.Core.Metadata;
 22 using Kingdee.BOS.Orm.DataEntity;
 23 namespace JDSample.FormPlugIn.BaseData
 24 {
 25     /// <summary>
 26     /// 多層次基礎資料列表插件
 27     /// </summary>
 28     /// <remarks>
 29     /// 演示用基礎資料:
 30     /// FormId : 08441f27-444c-43ee-bed9-8498a1ff066c
 31     /// 基類:1.1 不受組織控制基礎資料模板(BOS_NoOrgControlBDModel)
 32     /// 名稱:資料類別
 33     /// 包含的字段:
 34     /// 1. 上級資料 F_JD_ParentId
 35     /// 2. 編碼 FNumber
 36     /// 3. 名稱 FName
 37     /// 4. 完整父節點內碼 F_JD_FullParentId (由各級父節點內碼組成,如(.1001.1002.1003,以便根據當前節點,快速找出所有下級節點)
 38     /// </remarks>
 39     [Description("多層次基礎資料列表插件")]
 40     public class MulLevelBaseDataList : AbstractListPlugIn
 41     {
 42         private TreeNode _groupRootNode = null;
 43         /// <summary>
 44         /// 界面請求構建樹節點事件;攔截此事件,自行構建樹節點
 45         /// </summary>
 46         /// <param name="e"></param>
 47         public override void TreeLoadData(TreeLoadDataArgs e)
 48         {
 49             TreeView tv = this.View.GetControl<TreeView>("FGroupTreeView");
 50             var parentNode = BuildTreeNode(this.Context, this.View.BillBusinessInfo);
 51             tv.SetRootNode(parentNode);
 52             tv.SetExpanded(true);
 53             // 略過系統預置取分組樹的功能
 54             e.Cancel  = true;
 55         }
 56         /// <summary>
 57         /// 用戶點擊樹節點事件:
 58         /// 攔截此事件,根據用戶所選節點,設置過濾條件,篩選列表數據
 59         /// </summary>
 60         /// <param name="e"></param>
 61         public override void TreeNodeClick(TreeNodeArgs e)
 62         {
 63             TreeViewFilterParameter filterParameter = ((ITreeListModel)this.Model).TreeViewFilterParameter as TreeViewFilterParameter;
 64             filterParameter.FilterString = string.Empty;        // 分組過濾條件
 65             filterParameter.IgnoreSelectedGroupIds = false;     // 是否忽略默認的分組過濾處理
 66             if (e.NodeId == "0")
 67             {
 68                 // 點擊根節點,無需設置分組過濾條件
 69                 return;
 70             }
 71             // 拼接分組過濾條件:資料類別 = 本節點,以及本節點的全部下級節點
 72             string filter = string.Format(" (FID = {0} OR F_JD_FullParentId LIKE '%.{0}.%') ", e.NodeId);
 73             // 采用二開設置的分組過濾條件,忽略系統默認的分組過濾
 74             filterParameter.FilterString = filter;
 75             filterParameter.IgnoreSelectedGroupIds = true;
 76         }
 77         public static TreeNode BuildTreeNode(Context ctx, BusinessInfo groupInfo)
 78         {
 79             // 構建根目錄
 80             TreeNode rootNode = new TreeNode();
 81             rootNode.id = "0";
 82             rootNode.parentid = "0";
 83             rootNode.text = "全部";
 84             // 讀取全部資料分類數據
 85             List<SelectorItemInfo> selectorList = new List<SelectorItemInfo>();
 86             selectorList.Add(new SelectorItemInfo("FID"));
 87             selectorList.Add(new SelectorItemInfo("F_JD_ParentId"));
 88             selectorList.Add(new SelectorItemInfo("FNumber"));
 89             selectorList.Add(new SelectorItemInfo("FName"));
 90             var infoGroups = Kingdee.BOS.ServiceHelper.BusinessDataServiceHelper.Load(
 91                             ctx,
 92                             groupInfo, 
 93                             selectorList,
 94                             OQLFilter.CreateHeadEntityFilter(""));
 95             
 96             if (infoGroups == null || infoGroups.Length == 0) return rootNode;
 97             // 把各資料分類,轉換為樹節點,並放在字典中
 98             Dictionary<string, TreeNode> dctNodes = new Dictionary<string, TreeNode>();
 99             foreach (var infoGroup in infoGroups)
100             {
101                 long id = Convert.ToInt64(infoGroup["Id"]);
102                 long parentId = Convert.ToInt64(infoGroup["F_JD_ParentId_Id"]);
103                 string number = Convert.ToString(infoGroup["Number"]);
104                 string name = Convert.ToString(infoGroup["Name"]);
105                 TreeNode node = new TreeNode() 
106                 { 
107                     id = id.ToString(), 
108                     text = string.Format("{0}({1})", name, number),
109                     parentid = parentId.ToString(),
110                 };
111                 dctNodes.Add(id.ToString(), node);
112             }
113             // 把各節點,放在其父節點下面
114             foreach (var item in dctNodes)
115             {
116                 TreeNode node = item.Value;
117                 if (node.parentid == "0")
118                 {
119                     rootNode.children.Add(node);
120                 }
121                 else if (dctNodes.Keys.Contains(node.parentid))
122                 {
123                     dctNodes[node.parentid].children.Add(node);
124                 }
125             }
126             return rootNode;
127         }
128     }
129 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM