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();
}
实现要求:
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();
}

浙公网安备 33010602011771号