研究了两天,网上也看了不少资料,但都是静态绑定到TreeList,就是在已知道表的情况下进行绑定,表中已经把KeyFieldName和ParentFieldName的关系确定好了,比较死板。我需要的功能是自动根据XML进行确定KeyFieldName和ParentFieldName关系。所以确定二者关系就比较麻烦,我现在只能实现对三层的XML文件进行显示,四层的还会出错,正在进一步改进,记录如下:(草稿形式,不很规范,谅解)

private void btnOpenFile_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFile = new OpenFileDialog();
            openFile.Title = "打开XML文件";
            openFile.Filter = "XML文件(*.xml)|*.xml";
            openFile.InitialDirectory = "C:\\";
            openFile.ShowDialog();
            string filepath = openFile.FileName;
            this.treeList1.DataSource = SelectXml(filepath);

}

public static int parentId;
        public static int Id;
        private DataTable SelectXml(string xmlPath)
        {
            DataTable dt = new DataTable();
            DataColumn did = new DataColumn("ID", Type.GetType("System.Int32"));
            DataColumn dParentID = new DataColumn("ParentID", Type.GetType("System.Int32"));
            DataColumn dNodeName = new DataColumn("节点名称", Type.GetType("System.String"));
            dt.Columns.Add(did);
            dt.Columns.Add(dParentID);
            dt.Columns.Add(dNodeName);
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(xmlPath);
            //初始ID,ParentID
            Id = 1;
            parentId = 1;
            //获取根节点
            XmlElement xmlRootElement = xmlDoc.DocumentElement;
            DataRow dr = dt.NewRow();
            dr["ID"] = Id;
            dr["ParentID"] = 0;
            dr["节点名称"] = xmlRootElement.Name.ToString();
            dt.Rows.Add(dr);
            Id++;
            int Id1 = Id,pId;
            int b =  parentId, d = Id;              //记录递归后的ID,ParentId变化
            XmlNodeList xmlNodeList = xmlRootElement.ChildNodes;
            foreach (XmlElement xmlElement in xmlNodeList)
            {
                XmlNode xmlnode = (XmlNode)xmlElement;
                dr = dt.NewRow();
                dr["ID"] =d;
                dr["ParentID"] = parentId;
                dr["节点名称"] = xmlnode.Name.ToString();
                dt.Rows.Add(dr); 
                Id1 = d;
                pId = b+1;
                sort(xmlnode, Id1,pId,dt,ref d,ref b);            //利用ref记录随时变化
            }
            return dt;
        }

private void sort(XmlNode xmlnode, int ID,int parentId,DataTable dt,ref int d,ref int b)
        {         
            if (xmlnode.HasChildNodes)
            {
                XmlNodeList ChildNodeList = xmlnode.ChildNodes;
                foreach (XmlNode xmlNode in ChildNodeList)
                {
                    if (xmlNode.NodeType == XmlNodeType.Text)
                    {
                        Id = Id - 1;
                        ID = ID + 1;
                        continue;
                    }
                    else
                    {
                        ID = ID + 1;
                        DataRow dr = dt.NewRow();
                        dr["ID"] = ID;
                        dr["ParentID"] = parentId;
                        dr["节点名称"] = xmlNode.Name.ToString();
                        Id = Id + 1;
                        dt.Rows.Add(dr); 
                        sort(xmlNode,ID, Id - 1, dt,ref d,ref b);
                    }
                }   
            }
            d=ID+1;
            b = ID;
        }

转载于:https://www.cnblogs.com/dengshiwei/p/4258795.html

第三方控件DevExpress的TreeList绑定XML文件相关推荐

  1. BCB6无XMLDOC控件下生成及保存XML文件

    某个项目需要将数据保存为XML文件,但是BCB6没安装XMLDOC,想下载安装包也难找,于是就在网上查了些资料,不使用XMLDOC的情况下生成和保存XML文件. 包含头文件: #include < ...

  2. 教程-Delphi第三方控件安装卸载指南

    1 只有一个DCU文件的组件.DCU文件是编译好的单元文件,这样的组件是作者不想把源码公布.一般来说,作者必须说明此组件适合Delphi的哪种版本,如果版本不对,在安装时就会出现错误.也正是因为没有源 ...

  3. edptrayicon怎么卸载_教程-Delphi第三方控件安装卸载指南

    1 只有一个DCU文件的组件.DCU文件是编译好的单元文件,这样的组件是作者不想把源码公布.一般来说,作者必须说明此组件适合Delphi的哪种版本,如果版本不对,在安装时就会出现错误.也正是因为没有源 ...

  4. DevExpress 第三方控件汉化

    DevExpress 第三方控件汉化的全部代码和使用方法 DevExpress.XtraEditors.Controls  此控件包中包含的控件最多,包括文本框,下拉列表,按钮,等等        D ...

  5. 学习笔记---母板页、用户控件、第三方控件及视图状态管理

    一.母版页 在制作页面的过程中, 多个页面往往具有相同的页面Header和页面Footer, 多个页面只是在中间部分有变化. 那么我们完全可以避免在每个页面中都写一遍页头和页尾的代码, 这种技术就是母 ...

  6. android组件用法说明,Android第三方控件PhotoView使用方法详解

    Android第三方控件PhotoView使用方法详解 发布时间:2020-10-21 15:06:09 来源:脚本之家 阅读:74 作者:zhaihaohao1 PhotoView的简介: 这是一个 ...

  7. SmartImage图片第三方控件android

    1.新建 :SmartImageDemo\app\src\main\res\xml\network_security_config.xml 该配置用于HTTP请求 <?xml version=& ...

  8. DXperience皮肤设置 C#第三方控件学习笔记

    用过DXperience .net版本以后,我发现这是个不错第三方控件.简单的说,就是开发软件用的界面库,支持VB和C#语言,至于其它语言我没有了解过.如果还有人问界面库又是什么?那就顺便也说一下.界 ...

  9. WPF第三方控件盘点

    WPF统一的编程模型.语言和框架,实现了界面设计人员和开发人员工作可以分离的境界,鉴于WPF强大的优势,且一直是开发者关注的地方,下面和大家分享基于WPF项目开发需要用到的第三方控件,包括业界最受好评 ...

最新文章

  1. 记windows平台使用vscode 搭建linux c++开发环境
  2. STP HSRP和NAT结合实现网络出口的冗余和次优路径分析
  3. html 手动添加thead,HTML表格 - 我可以在thead之前添加额外的tbody吗?
  4. 正则表达式的三种模式【贪婪、勉强、侵占】的分析
  5. Google I/O 2019大会 Android主题会议
  6. 外贸注意:出口这些新兴市场国家政策有变化
  7. Linux制作软盘镜像
  8. Python TKinter下拉日历控件
  9. 亚当·斯密 传奇一生
  10. 《面试无忧》--DCL单例模式为什么要用volatile修饰?
  11. 1.01.21盒子模型,浮动,定位
  12. Linux入门到精通
  13. v-model的基本使用
  14. 日常英语单词学习-A Family Tree
  15. 哈哈,又找到几个强大的html5+css3的动画效果
  16. 东软python培训班
  17. ELK环境搭建+入门使用
  18. windows terminal 的强力美化和设置
  19. hdu6599 I Love Palindrome String
  20. 信息学奥赛真题解析(小凯的疑惑)

热门文章

  1. hdu 6579 Operation (在线线性基)
  2. [小程序]微信小程序获取input并发送网络请求
  3. linux作业(第四章练习题)
  4. 提高 webpack 构建 Vue 项目的速度
  5. 洛谷 1057——传球游戏(递推与递归二分)
  6. Otsu algorithm
  7. Android分享中, 过滤指定的应用,已经过滤蓝牙, 并且对不同的分享方式发送不同的内容?...
  8. Direct3D学习_绘制流水线
  9. StringBuffer
  10. jdbc preparestatement 执行多条语句_第二十一天JDBC编程