第三方控件DevExpress的TreeList绑定XML文件
研究了兩天,網(wǎng)上也看了不少資料,但都是靜態(tài)綁定到TreeList,就是在已知道表的情況下進行綁定,表中已經(jīng)把KeyFieldName和ParentFieldName的關(guān)系確定好了,比較死板。我需要的功能是自動根據(jù)XML進行確定KeyFieldName和ParentFieldName關(guān)系。所以確定二者關(guān)系就比較麻煩,我現(xiàn)在只能實現(xiàn)對三層的XML文件進行顯示,四層的還會出錯,正在進一步改進,記錄如下:(草稿形式,不很規(guī)范,諒解)
? ? ?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("節(jié)點名稱", 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é)點
? ? ? ? ? ? XmlElement xmlRootElement = xmlDoc.DocumentElement;
? ? ? ? ? ? DataRow dr = dt.NewRow();
? ? ? ? ? ? dr["ID"] = Id;
? ? ? ? ? ? dr["ParentID"] = 0;
? ? ? ? ? ? dr["節(jié)點名稱"] = 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é)點名稱"] = 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["節(jié)點名稱"] = 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文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 54. Spiral Matrix
- 下一篇: ADO.NET连接数据库