第三方控件DevExpress的TreeList绑定XML文件
研究了兩天,網(wǎng)上也看了不少資料,但都是靜態(tài)綁定到TreeList,就是在已知道表的情況下進(jìn)行綁定,表中已經(jīng)把KeyFieldName和ParentFieldName的關(guān)系確定好了,比較死板。我需要的功能是自動(dòng)根據(jù)XML進(jìn)行確定KeyFieldName和ParentFieldName關(guān)系。所以確定二者關(guān)系就比較麻煩,我現(xiàn)在只能實(shí)現(xiàn)對(duì)三層的XML文件進(jìn)行顯示,四層的還會(huì)出錯(cuò),正在進(jìn)一步改進(jìn),記錄如下:(草稿形式,不很規(guī)范,諒解)
? ? ?private void btnOpenFile_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? OpenFileDialog openFile = new OpenFileDialog();
? ? ? ? ? ? openFile.Title = "打開(kāi)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("節(jié)點(diǎn)名稱", 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;
? ? ? ? ? ? //獲取根節(jié)點(diǎn)
? ? ? ? ? ? XmlElement xmlRootElement = xmlDoc.DocumentElement;
? ? ? ? ? ? DataRow dr = dt.NewRow();
? ? ? ? ? ? dr["ID"] = Id;
? ? ? ? ? ? dr["ParentID"] = 0;
? ? ? ? ? ? dr["節(jié)點(diǎn)名稱"] = 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["節(jié)點(diǎn)名稱"] = xmlnode.Name.ToString();
? ? ? ? ? ? ? ? dt.Rows.Add(dr);?
? ? ? ? ? ? ? ? Id1 = d;
? ? ? ? ? ? ? ? pId = b+1;
? ? ? ? ? ? ? ? sort(xmlnode, Id1,pId,dt,ref d,ref b); ? ? ? ? ? ?//利用ref記錄隨時(shí)變化
? ? ? ? ? ? }
? ? ? ? ? ? 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["節(jié)點(diǎn)名稱"] = 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;
? ? ? ? }
轉(zhuǎn)載于:https://www.cnblogs.com/dengshiwei/p/4258795.html
總結(jié)
以上是生活随笔為你收集整理的第三方控件DevExpress的TreeList绑定XML文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 54. Spiral Matrix
- 下一篇: Visual Studio 2008中常