/// <summary>
/// btnXML2Tree_Click
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnXML2Tree_Click(object sender, EventArgs e)
{
pnlModifyData.Visible = false;
txtModiData.Text = "";
if (this.dlgOpen.ShowDialog() == DialogResult.OK)
{
DisplayTree();
}
}
private void DisplayTree()
{
if(dlgOpen.FileName.Trim().Length!=0)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(dlgOpen.FileName);
XmlNodeList xmlNodes = xmlDoc.DocumentElement.ChildNodes;
tvwStudents.ShowNodeToolTips = true;
tvwStudents.ShowPlusMinus = true;
TreeNode rootNode = null; //新建根结点rootNode
this.tvwStudents.BeginUpdate();
this.tvwStudents.Nodes.Clear();
rootNode = tvwStudents.Nodes.Add(xmlDoc.LastChild.Name); //将XML中的根结点与rootNode关联
rootNode.Tag = "0";
XmlNode2TreeNode(xmlNodes, rootNode.Nodes); //xmlNodes为全集(除根结点外)的;rootNode.Nodes为空集,做加结点准备
rootNode.Expand(); //展开根结点rootNode
this.tvwStudents.EndUpdate();
}
}
/// <summary>
/// 递归方法 XmlNode2TreeNode
/// </summary>
/// <param name="xmlNode"></param>
/// <param name="treeNode"></param>
private void XmlNode2TreeNode(XmlNodeList xmlNode, TreeNodeCollection treeNode) //递归方法
{
foreach (XmlNode var in xmlNode) //遍历XmlNodeList类对象,
{
TreeNode newTreeNode = new TreeNode();
if (var.NodeType == XmlNodeType.Element) //1 如是元素
{
newTreeNode.Text = var.Name;
if (var.Attributes.Count != 0) //11 如有属性
{
for (int i = 0; i < var.Attributes.Count; i++)
newTreeNode.ToolTipText = var.Attributes[i].Name + ": " + var.Attributes[i].Value;
}
treeNode.Add(newTreeNode);
}
if (var.NodeType == XmlNodeType.Text) //2 如是文本内容
{
newTreeNode.Text = var.Value;
newTreeNode.Tag = "text";
newTreeNode.NodeFont = new Font("宋体", Font.Size+0.1f, FontStyle.Bold);
newTreeNode.ForeColor = Color.DarkBlue;
newTreeNode.BackColor = Color.LightYellow;
treeNode.Add(newTreeNode);
}
if (var.NodeType == XmlNodeType.Comment)
{
newTreeNode.Text = "注: "+var.Value;
newTreeNode.Tag = "comment";
newTreeNode.NodeFont = new Font("黑体",Font.Size, FontStyle.Italic);
newTreeNode.ForeColor = Color.Green;
treeNode.Add(newTreeNode);
}
if (var.HasChildNodes) //3 如有子结点集合
{
XmlNode2TreeNode(var.ChildNodes, newTreeNode.Nodes);
}
}
}
private void btnOK_Click(object sender, EventArgs e)
{
if (tvwStudents.SelectedNode == null) return;
tvwStudents.SelectedNode.Text = txtModiData.Text; //0
XmlDocument xmlDoc = new XmlDocument(); //1
xmlDoc.Load(dlgOpen.FileName);
XmlNode xn = xmlDoc.LastChild;
for (int i = 0; i < sTemp.Length-1; i++)
{
xn = xn.ChildNodes[Convert.ToInt16(sTemp.Substring(i, 1))];
}
xn.InnerText = txtModiData.Text;
xmlDoc.Save(dlgOpen.FileName);
txtModiData.Text = "";
}
private void tvwStudents_AfterSelect(object sender, TreeViewEventArgs e)
{
sTemp = "";
TreeNode tn = tvwStudents.SelectedNode;
int temp = tn.Level;
while (temp != 0)
{
sTemp = tn.Index.ToString().Trim() + sTemp;
tn = tn.Parent;
temp = tn.Level;
}
btnDel.Enabled = false;
pnlModifyData.Visible = false;
if (e.Node.Nodes.Count == 0 && e.Node.Tag.ToString() != "comment")
{
pnlModifyData.Location = new Point(e.Node.Bounds.Left, e.Node.Bounds.Bottom +(int)Font.Size);
pnlModifyData.Visible = true;
}
else
btnDel.Enabled = true;
}
private void btnDel_Click(object sender, EventArgs e)
{
XmlDocument xmlDoc = new XmlDocument(); //1
xmlDoc.Load(dlgOpen.FileName);
XmlNode xn = xmlDoc.LastChild;
for (int i = 0; i < sTemp.Length; i++)
{
xn = xn.ChildNodes[Convert.ToInt16(sTemp.Substring(i, 1))];
}
xn.ParentNode.RemoveChild(xn);
xmlDoc.Save(dlgOpen.FileName);
tvwStudents.Nodes.Remove(tvwStudents.SelectedNode);
}
运行效果图如下:
申明:部分代码来源于网络,感谢那些作者们,谢谢!
分享到:
相关推荐
递归代码实例包括从xml文件中读取信息到treeview从本地磁盘中加载信息到treeview和国家按省显示各市等
《C#开发实例大全(基础卷)》筛选、汇集了C#开发从基础...实例229 将数据表中的字段添加到ComboBox 控件中 303 实例230 在ComboBox下拉列表中显示图片 304 实例231 用ComboBox控件制作浏览器 网址输入框 305 实例232...
实例109 将xml文件节点绑定到treeview控件中 实例110 修改treeview控件的节点文本 第11章 c#面向对象高级技术 实例111 利用接口实现选择不同的语言 实例112 使用接口作为方法参数进行编程 实例113 自定义抽象类计算...
实例109 将xml文件节点绑定到treeview控件中 178 实例110 修改treeview控件的节点文本 179 第11章 c#面向对象高级技术 181 实例111 利用接口实现选择不同的语言 182 实例112 使用接口作为方法参数进行编程 184 实例...
103 <br>0168 使用Message.Show输出用户信息 104 <br>5.3 图片数据处理技巧 104 <br>0169 如何将图片存入数据库 104 <br>0170 如何将图片从数据库中读取出来 104 <br>0171 如何只允许输入...