場景 Winform中DevExpress的TreeList的入門使用教程(附源碼下載): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100075677 https://www.cnblogs.com/badaoliumang ...
場景
Winform中DevExpress的TreeList的入門使用教程(附源碼下載):
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100075677
https://www.cnblogs.com/badaoliumangqizhi/p/11412053.html
在上面實現給TreeList賦值的基礎上,將其數據源更改為本地某路徑下的所有文件和目錄。
效果
實現
在原來的節點類中添加節點類型屬性,該屬性是枚舉類型。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DevExpressSimple { class TreeNode { //標識Id private string id; //父級節點ID private string parentId; //節點顯示文本 private string nodeText; private TreeNodeTypes nodeType = TreeNodeTypes.Folder; public TreeNodeTypes NodeType { get { return nodeType; } set { nodeType = value; } } public string NodeText { get { return nodeText; } set { nodeText = value; } } public string ParentId { get { return parentId; } set { parentId = value; } } public string Id { get { return id; } set { id = value; } } } }
然後新建枚舉類TreeNodeType
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DevExpressSimple { public enum TreeNodeTypes { /// <summary> /// 文件夾 /// </summary> Folder = 0, /// <summary> /// 文件 /// </summary> File = 1 } }
然後新建工具類TreeListHelper,用來將目錄轉換成節點對象並添加到數據源。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DevExpressSimple { class TreeListHelper { public static List<TreeNode> ParseDir(string dataRootDir, List<TreeNode> data) { //如果傳遞的list為空,則新建一個 if (data == null) { data = new List<TreeNode>(); } //如果目錄不存在則直接原樣將data返回 if (!System.IO.Directory.Exists(dataRootDir)) { return data; } TreeNode node = null; //創建目錄對象 System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(dataRootDir); //使用數組接收目錄下的所有目錄 System.IO.DirectoryInfo[] subDirs = dir.GetDirectories(); //迴圈每個目錄 foreach (System.IO.DirectoryInfo subDir in subDirs) { //新建節點對象 node = new TreeNode(); //節點的Id取當前目錄的名字 node.Id = subDir.Name; //節點的父級ID 取上層目錄的名字 node.ParentId = dir.Name; //節點要顯示的文本也取當前目錄的名字 node.NodeText = subDir.Name; //節點類型為文件夾 node.NodeType = TreeNodeTypes.Folder; //將當前節點添加到list數據源 data.Add(node); //因為是文件夾,所以需要迭代當前方法 並將當前目錄作為參數重新傳遞 直到迭代完所有文件夾 //這裡使用FullName方法 獲取全路徑 ParseDir(subDir.FullName, data); } //遍歷完文件夾之後 遍歷 文件 //使用FileInfo的GetGiles方法 獲取所有文件 System.IO.FileInfo[] subFiles = dir.GetFiles(); //遍歷所有文件 foreach (System.IO.FileInfo subFile in subFiles) { node = new TreeNode(); node.Id = subFile.Name; node.ParentId = dir.Name; node.NodeText = subFile.Name; node.NodeType = TreeNodeTypes.File; data.Add(node); } //返回數據源 return data; } } }
再回到原來窗體載入的代碼中設置數據源list的地方。
//新建list數據源 List<TreeNode> data = new List<TreeNode>(); //data.Add(new TreeNode() { Id = "root", ParentId = String.Empty, NodeText = "測試1" }); // data.Add(new TreeNode() { Id = "first", ParentId = "root", NodeText = "測試2" }); //將指定目錄下的所有文件以及文件夾封裝成節點對象並添加到list data = TreeListHelper.ParseDir(@"E:\test", data); //添加根節點 Id屬性對應根目錄的名字, 父級Id為空 節點顯示的文本 為 “所有文本” 節點類型為 文件夾 data.Add(new TreeNode() { Id = "test", ParentId = String.Empty, NodeText = "所有文件", NodeType = TreeNodeTypes.Folder });
完整示例代碼
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace DevExpressSimple { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { string keyFieldName = "Id"; string parentFieldName = "ParentId"; //新建list數據源 List<TreeNode> data = new List<TreeNode>(); //data.Add(new TreeNode() { Id = "root", ParentId = String.Empty, NodeText = "測試1" }); // data.Add(new TreeNode() { Id = "first", ParentId = "root", NodeText = "測試2" }); //將指定目錄下的所有文件以及文件夾封裝成節點對象並添加到list data = TreeListHelper.ParseDir(@"E:\test", data); //添加根節點 Id屬性對應根目錄的名字, 父級Id為空 節點顯示的文本 為 “所有文本” 節點類型為 文件夾 data.Add(new TreeNode() { Id = "test", ParentId = String.Empty, NodeText = "所有文件", NodeType = TreeNodeTypes.Folder }); //添加單列 DevExpress.XtraTreeList.Columns.TreeListColumn colNode = new DevExpress.XtraTreeList.Columns.TreeListColumn(); //設置名字 colNode.Name = "名字"; //設置標題 colNode.Caption = "標題"; //設置從數據源分配給當前列的欄位名。 colNode.FieldName = "NodeText"; //設置樹列表中顯示當前列的位置。 colNode.VisibleIndex = 0; //是否可見 colNode.Visible = true; //是否允許編輯 colNode.OptionsColumn.AllowEdit = false; //是否允許移動 colNode.OptionsColumn.AllowMove = false; //是否允許移動至自定義窗體 colNode.OptionsColumn.AllowMoveToCustomizationForm = false; //是否允許排序 colNode.OptionsColumn.AllowSort = false; //是否固定列寬 colNode.OptionsColumn.FixedWidth = false; //是否只讀 colNode.OptionsColumn.ReadOnly = true; //移除列後是否允許在自定義窗體中顯示 colNode.OptionsColumn.ShowInCustomizationForm = true; //先清除列 this.treeList1.Columns.Clear(); //將列數組添加到集合的結尾。 this.treeList1.Columns.AddRange(new DevExpress.XtraTreeList.Columns.TreeListColumn[] { colNode }); this.treeList1.OptionsView.ShowColumns = false; //隱藏列標頭 this.treeList1.OptionsView.ShowIndicator = false; //隱藏節點指示器面板 this.treeList1.OptionsView.ShowHorzLines = false; //隱藏水平表格線 this.treeList1.OptionsView.ShowVertLines = false; //隱藏垂直表格線 this.treeList1.OptionsView.ShowIndentAsRowStyle = false; #region 綁定數據源 //設置屬性KeyFieldName ParentFieldName //設置一個值,該值指定綁定到XtratreeList控制項的數據源的鍵欄位 this.treeList1.KeyFieldName = keyFieldName; //設置一個值,該值表示標識此數據源中父記錄的數據源欄位。 this.treeList1.ParentFieldName = parentFieldName; this.treeList1.DataSource = data; //刷新數據 this.treeList1.RefreshDataSource(); #endregion } } }
這裡指定的目錄是E盤下的test目錄,在test下新建一些目錄和文件。
示例源碼下載
https://download.csdn.net/download/badao_liumang_qizhi/11614756