欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Winforn中DevExpress的TreeList中显示某路径下的所有目录和文件(附源码下载)

程序员文章站 2022-07-21 18:10:58
场景 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

在上面实现给treelist赋值的基础上,将其数据源更改为本地某路径下的所有文件和目录。

效果

Winforn中DevExpress的TreeList中显示某路径下的所有目录和文件(附源码下载)

 

Winforn中DevExpress的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下新建一些目录和文件。

Winforn中DevExpress的TreeList中显示某路径下的所有目录和文件(附源码下载)
 Winforn中DevExpress的TreeList中显示某路径下的所有目录和文件(附源码下载)

 

示例源码下载