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赋值的基础上,将其数据源更改为本地某路径下的所有文件和目录。
效果
实现
在原来的节点类中添加节点类型属性,该属性是枚举类型。
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下新建一些目录和文件。