Winforn中DevExpress的TreeList中顯示某路徑下的所有目錄和文件(附源碼下載)


場景

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


免責聲明!

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



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