我有一个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
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#怎么做,谢谢
解决方案 »
- 请问我一直开发WEB程序,现在要开发个WINDOWS应用程序需要学什么?
- aspx C# 中的 GridView
- 如何让文本框中只能输入32位的二进制数?
- 移动硬盘不能读取?why?
- .net开发好是好,就是我的iis总是坏
- word 打印问题、在线等、、、
- 字符编码问题
- 大家好,通过vs2008建立的Office 2007插件程序,怎么制作打包程序啊
- winform中,如何将修改后的值显示在datagridview中?
- WPF,控件的可视状态,看下这段代码
- datatable N个表之间相加使用for循环,速度十分的慢,求解
- Dear buddy, I am mad, can you help me and don't drop me as your sacrifice
给你个参考 C#用递归方法把数据绑定到TreeView控件
将这些数据显示在各种控件上都是控件自己的事了,将这些数据存到xml中也与treeview listview这些控件无关void DisplayInTreeView(MyDataStruct ds) {遍历数据,然后显示到treeview上}void DisplayInListView(MyDataStruct ds) {遍历数据,然后显示到listview上}void WriteToXML(MyDataStruct ds) {遍历数据,然后写道xml文件中}这样能将逻辑与UI分离,降低耦合度
以前写的一个关键字替换的小东西,代码很垃圾,不用细看,只是提供思路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");
}
}
}
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;
}
}
先定义全局变量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;