TreeView加载XML

帮一朋友做的,贴上来以备后用。
实现要求:
Name 为节点的Text,Formel 为节点的Name,Explain 为节点的Tag
XML
<?xml version="1.0" encoding="utf-8" ?>
<root >
  
<BM >
    
<Name >COD排放</Name >
    
<Formel ></Formel >
    
<Explain ></Explain >
    
<BM >
      
<Name >排放公式一</Name >
      
<Formel >a+b</Formel >
      
<Explain >2</Explain >
    
</BM >
    
<BM >
      
<Name >排放公式二</Name >
      
<Formel >a+b-c</Formel >
      
<Explain >2</Explain >
    
</BM >
  
</BM >
  
<BM >
    
<Name >SO2排放</Name >
    
<Formel >a*(b+c)</Formel >
    
<Explain ></Explain >
    
<BM >
      
<Name >计算公式一</Name >
      
<Formel >a*(b+c)-d</Formel >
      
<Explain >2</Explain >
    
</BM >
    
<BM >
      
<Name >计算公式二</Name >
      
<Formel >a*(b-c)+d</Formel >
      
<Explain >2</Explain >
      
<BM >
        
<Name >计算公式三</Name >
        
<Formel >a-b</Formel >
        
<Explain >2</Explain >
        
<BM >
          
<Name >计算公式四</Name >
          
<Formel >a+b*c</Formel >
          
<Explain >2</Explain >
        
</BM >
      
</BM >
    
</BM >
  
</BM >
</root >

绑定的代码:
private void LoadXmlNode_2(TreeNodeCollection ATreeNodes, XmlNode xmlNodeList)
        
{
            
string ParentName = string.Empty;
            
string Formel = string.Empty;
            
string Explain = string.Empty;

            XmlNode vXmlNode 
= xmlNodeList.SelectSingleNode("Name");
            
if (vXmlNode != null) ParentName = vXmlNode.InnerText;

            vXmlNode 
= xmlNodeList.SelectSingleNode("Formel");
            
if (vXmlNode != null) Formel = vXmlNode.InnerText;

            vXmlNode 
= xmlNodeList.SelectSingleNode("Explain");
            
if (vXmlNode != null) Explain = vXmlNode.InnerText;

            TreeNode vTreeNode 
= ATreeNodes.Add(Formel, ParentName);
            vTreeNode.Tag 
= Explain;
            
foreach (XmlNode vTemp in xmlNodeList.SelectNodes("BM"))
            
{
                LoadXmlNode_2(vTreeNode.Nodes, vTemp);
            }

        }
调用:
string XmlFile = Application.StartupPath + "\\Sample-2.xml";
 XmlDocument doc 
= new XmlDocument();
            doc.Load(XmlFile);
            XmlNode vRoot 
= doc.DocumentElement;

            treeView1.Nodes.Clear();
            LoadXmlNode_2(treeView1.Nodes, vRoot);
            treeView1.Nodes[
0].Text = "计算公式";
            treeView1.ExpandAll();

效果截图:


添加节点:
private void btnAdd_Click(object sender, EventArgs e)
        
{
            
//获取当前选中的节点   
            TreeNode selectedNode = treeView1.SelectedNode;
            
if (selectedNode == null)
            
{
                MessageBox.Show(
"请在添加子节点之前选中一个节点""提示");
                
return;
            }

            TreeNode td 
= new TreeNode();
            td.Name 
= txbFormel.Text;
            td.Text 
= txbName.Text;
            td.Tag 
= txbExplain.Text;
            treeView1.SelectedNode.Nodes.Add(td);
            treeView1.Update();
        }

保存为XML文件:
private void btnSave_Click(object sender, EventArgs e)
        
{
            
string SaveFile = @"c:\\test.xml";
            sr 
= new StreamWriter(SaveFile, false, System.Text.Encoding.UTF8);
            sr.WriteLine(
"<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
            
//Write our root node
            sr.WriteLine("<root>");
            GetTvXml(treeView1.Nodes);
            sr.WriteLine(
"</root>");
            sr.Close();
        }


        StreamWriter sr;       
        
/// <summary>
        
/// 递归Treeview写入XML文件
        
/// </summary>
        
/// <param name="tnc"></param>

        private void GetTvXml(TreeNodeCollection tnc)
        
{
            
foreach (TreeNode node in tnc)
            
{
                
if (node.Parent != null)
                
{
                    sr.WriteLine(
"<BM>");

                    sr.WriteLine(
"<Name>" + node.Text + "</Name>");
                    sr.WriteLine(
"<Formel>" + node.Name + "</Formel>");
                    sr.WriteLine(
"<Explain>" + node.Tag + "</Explain>");

                    GetTvXml(node.Nodes);

                    sr.WriteLine(
"</BM>");
                }

                
else
                    GetTvXml(node.Nodes);
            }

        }
删除节点:
private void btnDel_Click(object sender, EventArgs e)
        
{
             
//获取当前选中的节点   
            TreeNode selectedNode = treeView1.SelectedNode;
            
if (selectedNode == null)
            
{
                MessageBox.Show(
"请在删除节点之前选中一个节点""提示");
                
return;
            }

            
//获取选中节点的父节点   
            TreeNode parentNode = selectedNode.Parent;
            
//如果父节点为null,也就是当前节点为根节点
            if (parentNode == null)
            
{
                
//从treeview的节点集合中删除但前选中的节点   
                treeView1.Nodes.Remove(selectedNode);
            }

            
else
            
{
                
//从父节点的节点集合中删除当前选中的节点   
                parentNode.Nodes.Remove(selectedNode);
                
//如果父节点没有子节点   
                
//if (parentNode.Nodes.Count == 0)
                
//{
                
//    //改变父节点的图标   
                
//    parentNode.ImageIndex = 2;
                
//    parentNode.SelectedImageIndex = 2;
                
//}
            }

            treeView1.Update();
            
//选中treeview   
            treeView1.Select();
        }
  

posted on 2008-06-22 17:37  冷月孤峰  阅读(864)  评论(0)    收藏  举报