我有一个treeview,样式如下:
1   
  01
  001
  002
  003
  02
  021
  022
  03
我用递归方式将数据绑定在treeview中,现在我想把数据存放在xml中,也用递归怎么做?我这有添加treeview信息的递归程序,如下:
foreach (DataRowView Row in dvTree)
  {
  TreeNode Node = new TreeNode();
  if (pNode == null)
  { //添加根节点
  Node.Text = Row["Item_Name"].ToString();
  Node.Value = Row["Item_Part_NO"].ToString();
  Node.ToolTip = Row["Item_Part_NO"].ToString();
  TreeView2.Nodes.Add(Node);
  Node.Expanded = true;
  //xml文档中创建根节点
  XmlElement xe1 = xmlDoc.CreateElement("Item_Name");
  xe1.InnerText = Row["Item_Name"].ToString();
  root.AppendChild(xe1);
  xmlDoc.Save(xmlPath);
  AddTree(Int32.Parse(Row["Sub_Item_ID"].ToString()), Node); //再次递归
  }
  else
  {   
  Node.Text = Row["Item_Name"].ToString();
  Node.Value = Row["Item_Part_NO"].ToString();
  Node.ToolTip = Row["Item_Part_NO"].ToString();
  pNode.ChildNodes.Add(Node);
  Node.Expanded = true;  //?xml添加当前节点的子节点
  AddTree(Int32.Parse(Row["Sub_Item_ID"].ToString()), Node); //再次递归
  }
  }
用c#怎么做,谢谢

解决方案 »

  1.   


    给你个参考 C#用递归方法把数据绑定到TreeView控件
      

  2.   

    这个好像是将信息绑定到treeview,和我说的不太一样
      

  3.   

    建议楼主自定义一个数据结构 用以存放你说的那些数据,并且提供遍历方法
    将这些数据显示在各种控件上都是控件自己的事了,将这些数据存到xml中也与treeview listview这些控件无关void DisplayInTreeView(MyDataStruct ds) {遍历数据,然后显示到treeview上}void DisplayInListView(MyDataStruct ds) {遍历数据,然后显示到listview上}void WriteToXML(MyDataStruct ds) {遍历数据,然后写道xml文件中}这样能将逻辑与UI分离,降低耦合度
      

  4.   


    以前写的一个关键字替换的小东西,代码很垃圾,不用细看,只是提供思路using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Text.RegularExpressions;
    using System.Xml;namespace Test
    {
        public partial class keyWordChose : Form
        {
            public keyWordChose()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                string fileName = @"Keys.xml";
                XmlTextReader reader = new XmlTextReader(fileName);
                while (reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.Element)
                    {
                        if (reader.LocalName.Equals("pNode") || reader.LocalName.Equals("sNode"))
                        {
                            fillTreeView(treeView1, reader.GetAttribute("name").ToString(),
                                reader.GetAttribute("id").ToString(), reader.GetAttribute("pid").ToString());
                        }
                    }
                }
                reader.Close();
            }        public void fillTreeView(TreeView tv, string str, string id, string pid)//建树
            {
                if (pid == "-1")
                {
                    TreeNode tn = new TreeNode();
                    tn.Text = str;
                    tn.Name = id;
                    tv.Nodes.Add(tn);
                }
                else
                {
                    TreeNode ptn = tv.Nodes[pid];
                    TreeNode tn = new TreeNode();
                    tn.Text = str;
                    tn.Name = id;
                    ptn.Nodes.Add(tn);
                }
            }        private void btnChange_Click(object sender, EventArgs e)//关键字替换
            {
                if (txtKey.Text != "" && textBox1.Text != "" && treeView1.Nodes != null)
                {
                    string text = textBox1.Text.Trim();
                    string key = txtKey.Text.Trim();
                    foreach (TreeNode tn in treeView1.Nodes)
                    {
                        if (tn.Nodes.Count != 0)
                        {
                            foreach (TreeNode tnSub in tn.Nodes)
                            {
                                Regex r = new Regex(tnSub.Text);
                                if (r.IsMatch(text))
                                {
                                    string newStr = "";
                                    string replaceStr = tnSub.Text;
                                    for (int i = 0; i < replaceStr.Length; i++)
                                    {
                                        newStr += replaceStr[i].ToString() + key;
                                    }
                                    text = r.Replace(text, newStr.Substring(0, (newStr.Length - key.Length)));
                                }
                            }
                        }
                    }
                    textBox2.Text = text;
                }
            }        private void btnChildNode_Click(object sender, EventArgs e)//添加子节点
            {
                if (txtKeyText.Text.Trim() != "")
                {
                    TreeNode tn = treeView1.SelectedNode;
                    if (tn != null && tn.Level == 0)
                    {
                        tn.Nodes.Add(txtKeyText.Text.Trim());
                    }
                }
            }        private void btnFatherNode_Click(object sender, EventArgs e)//添加父节点
            {
                if (txtKeyText.Text.Trim() != "")
                {
                    treeView1.Nodes.Add(txtKeyText.Text.Trim(), txtKeyText.Text.Trim(), -1);
                }
            }        private void btnDelNode_Click(object sender, EventArgs e)//删除节点
            {
                if (treeView1.SelectedNode != null)
                {
                    if (MessageBox.Show("确认要删除吗?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        treeView1.Nodes.Remove(treeView1.SelectedNode);
                    }
                }
            }        private void btnSave_Click(object sender, EventArgs e)//保存,写xml
            {
                XmlDocument xmlDoc = new XmlDocument();
                XmlDeclaration dec = xmlDoc.CreateXmlDeclaration("1.0", "GB2312", null);
                xmlDoc.AppendChild(dec);
                XmlElement root = xmlDoc.CreateElement("root");
                xmlDoc.AppendChild(root);
                int id = 1;
                int idSub = 1;
                foreach (TreeNode tn in treeView1.Nodes)//把这里转成递归形式就可以了
                {
                    if (tn.Parent == null)
                    {
                        XmlElement pnode = xmlDoc.CreateElement("pNode");
                        pnode.SetAttribute("name", tn.Text);
                        pnode.SetAttribute("id", id.ToString());
                        pnode.SetAttribute("pid", "-1");
                        foreach (TreeNode tnSub in tn.Nodes)
                        {
                            XmlElement sub = xmlDoc.CreateElement("sNode");
                            sub.SetAttribute("name", tnSub.Text);
                            sub.SetAttribute("id", id.ToString() + "-" + idSub.ToString());
                            sub.SetAttribute("pid", id.ToString());
                            idSub++;
                            pnode.AppendChild(sub);
                        }
                        id++;
                        idSub = 1;
                        root.AppendChild(pnode);
                    }
                }
                xmlDoc.Save(@"Keys.xml");
            }
        }
    }
      

  5.   

    没测,自己试下 public const string ROOT_ID = "000";
            public void BuildItemTree(TreeView ItemTreeView)
            {
                XmlDocument xmlDoc = new XmlDocument();
                XmlDeclaration dec = xmlDoc.CreateXmlDeclaration("1.0", "GB2312", null);
                xmlDoc.AppendChild(dec);
                XmlElement root = xmlDoc.CreateElement("root");
                xmlDoc.AppendChild(root);
                TreeNode tn = new TreeNode();
                tn.Value = ROOT_ID;
                tn.Text = "所有项目";
                this.LoadItemTree(ROOT_ID, tn, 0, root, xmlDoc);
                xmlDoc.Save(@"xxxxxx.xml");
                ItemTreeView.Nodes.Clear();
                ItemTreeView.ExpandDepth = 1;
                ItemTreeView.Nodes.Add(tn);
            }
            public void LoadItemTree(string ItemID, TreeNode node, int i, XmlElement root, XmlDocument xmlDoc)
            {
                List<ItemInfo> lst = new List<ItemInfo>();//取集合
                lst.Sort(delegate(Model.ItemInfo ioi1, Model.ItemInfo ioi2)
                   {
                       return ioi1.ItemID.CompareTo(ioi2.ItemID);
                   });//排序
                foreach (Model.ItemInfo o in lst)
                {
                    TreeNode n = new TreeNode();
                    n.Text = o.ItemName;
                    n.Value = o.ItemID;
                    node.ChildNodes.Add(n);
                    XmlElement pnode = xmlDoc.CreateElement("Node_"+i.ToString());
                    pnode.SetAttribute("name", lst[1].name.ToString());
                    pnode.SetAttribute("id", lst[0].name.ToString());
                    pnode.SetAttribute("pid", lst[2].name.ToString());
                    root.AppendChild(pnode);
                    LoadItemTree(o.ItemID, n,i+1,pnode,xmlDoc);
                    i = i - 1;
                }
            }
      

  6.   

    有个错纠正一下
    先定义全局变量public int _i
    public void LoadItemTree(string ItemID, TreeNode node, int _i, XmlElement root, XmlDocument xmlDoc)
    里面 
    _i=_i+1;
    LoadItemTree(o.ItemID, n,_i,pnode,xmlDoc);
    _i=_i-1;