




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、?读取xml文件中的树状结构数据,并用treeview控件呈现?在相同层级中前后/上下移动节点?删除指定值的节点?把treeview的节点存储到xml文件中开发环境:windows xp sp2, visual studio 2005 with sp1xml数据的组织结构我的xml数据结构如下所示: 其中nodetext为在treeview中显示的节点文本,nodevalue为该节点实际存储的值,而 a,b,c,d,e,f 为预定义的6个测试值用treeview控件呈现xml数据把上述的xml文件的数据呈现到treeview控件中主要使用了如下的递归处理:变量#region 变量 privat
2、e bool enabled = false; private string strxmlpath = null; private xmldocument xmldoc = null;#endregion方法#region 方法 / / 根据xml文件加载树节点 / / 要加载的xml文件路径 private void loadtreenodes(string xmlpath) . this.xmldoc = new xmldocument(); try . this.xmldoc.load(xmlpath); xmlnodelist nodes = this.xmldoc.selectnod
3、es(testtreeview/testnode); this.treemain.beginupdate(); this.treemain.nodes.clear(); this.convertxmlnodetotreenode(nodes, this.treemain.nodes); this.treemain.endupdate(); catch (exception ex) . messagebox.show(程序发生错误: + ex.message, 异常, messageboxbuttons.ok, messageboxicon.error); private void conver
4、txmlnodetotreenode(xmlnodelist xmlnodes, treenodecollection treenodes) . foreach (xmlnode xmlnode in xmlnodes) . string nodetext = xmlnode.attributesnodetext.value; string nodevalue = xmlnode.attributesnodevalue.value; treenode newtreenode = new treenode(nodetext); newtreenode.tag = nodevalue; if (x
5、mlnode.haschildnodes) . this.convertxmlnodetotreenode(xmlnode.childnodes, newtreenode.nodes); treenodes.add(newtreenode); #endregion 在相同层级中前后/上下移动节点这里的移动节点没有使用常见的定义一个temp变量来存储临时数据,然后把要移动的2个数据交换位置。以“上移”为例,先把要移动的节点删除,再在该节点的前一个节点的位置插入该节点,在删除前把该节点存储在一个临时变量中,而“下移”则类似,下面是主要的代码: / 在同级中上移当前节点 private void b
6、tnmoveup_click(object sender, eventargs e) . treenode current = this.treemain.selectednode; treenode temp = null; if (current != null) . temp = current; treenode prev = current.prevnode; if (current.parent != null) . treenode parent = current.parent; parent.nodes.remove(current); parent.nodes.insert
7、(prev.index, temp); else . this.treemain.nodes.remove(current); this.treemain.nodes.insert(prev.index, temp); this.treemain.selectednode = temp; / 在同级中下移当前节点 private void btnmovedown_click(object sender, eventargs e) . treenode current = this.treemain.selectednode; if (current != null) . treenode ne
8、xt = current.nextnode; if (next != null) . treenode temp = next; if (current.parent != null) . treenode parent = current.parent; parent.nodes.remove(next); parent.nodes.insert(current.index, temp); else . this.treemain.nodes.remove(next); this.treemain.nodes.insert(current.index, temp); this.treemai
9、n.selectednode = temp; this.treemain.selectednode = current; 删除指定值的节点treeview节点实际存储的值保存在treenode.tag中,选择要删除的值,然后搜索定位所有节点,最后删除这些节点,重点是遍历所有treeview的节点搜索具有该值的节点,下面是主要代码: / 定位指定值的节点,其中listnodeslocated是一个listbox控件 / 列出所有定位到的节点的名称 private void locatenodewithvalue(treenodecollection nodes, string nodevalue
10、) . foreach (treenode node in nodes) . if (node.tag.tostring() = nodevalue) . this.listnodeslocated.items.add(node.text); if (node.nodes.count 0) . this.locatenodewithvalue(node.nodes, nodevalue); / 删除上述方法定位到的节点 private void deletenode(treenodecollection nodes, string valuetodelete) . foreach (treen
11、ode node in nodes) . if (node.tag.tostring() = valuetodelete) . nodes.remove(node); this.listnodeslocated.items.remove(node.text); else if (node.nodes.count 0) . this.deletenode(node.nodes, valuetodelete); 保存treeview的节点到xml文件中把编辑后的treeview中的treenode类型的节点转换成xmlnode类型节点保存到xml文件中,该xml文件就是最初选择加载的xml文件,在
12、保存之前要先删除xml中testtreeview根节点下的所有子节点,主要方法如下: / 保存主方法 private void savetreenodes(string filepath) . if (this.xmldoc != null) . xmlnode root = this.xmldoc.selectsinglenode(testtreeview); / 删除根节点下的所有原有节点 root.removeall(); this.converttreenodestoxmlnodes(this.treemain.nodes, root); this.xmldoc.save(this.s
13、trxmlpath); messagebox.show(保存成功!, 信息, messageboxbuttons.ok, messageboxicon.information); / 把treenode转换成对应的xmlnode private void converttreenodestoxmlnodes(treenodecollection treenodes, xmlnode xmlnode) . xmldocument doc = xmlnode.ownerdocument; foreach (treenode treenode in treenodes) . xmlnode newelement = null; xmlattribute attrvalue = null; newelement = doc.createnode(xmlnodetype.element, testnode, ); / set nodetext attrvalue = doc.createattribute(nodetext); attrvalue.value = treenode.text; newelement.attributes.append(attrvalue); / set nodevalue attrvalue = doc.createattribute(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO/TR 17716:2025 EN Road vehicles - Electrical disturbances from narrowband radiated electromagnetic energy - Radiated immunity for V2X
- 2025年中国南水北调集团中线有限公司夏季招聘4人笔试历年参考题库附带答案详解
- 仙桃市事业单位2025年统一公开招聘笔试历年典型考题及考点剖析附带答案详解
- 海南省万宁市2025年事业单位公开招聘工作人员(第5号)笔试历年典型考题及考点剖析附带答案详解
- 毕节市事业单位2025年面向社会公开招聘笔试联考笔试历年典型考题及考点剖析附带答案详解
- 2025年铜陵市铜官区事业单位公开招聘笔试原始笔试历年典型考题及考点剖析附带答案详解
- 2025年新公共营养师三级真题及答案解析大全
- 小学生秋冬保健知识课件
- 2025年能源行业智能电网在数字化转型中的智能运维与故障预测报告
- 信息工程招标管理办法
- 劳务派遣与服务协议
- 消费者权益保护培训课件
- DB11T 2454-2025 职业健康检查质量控制规范 生物样本化学物质检测
- 贸易公司员工职业操守行为准则制度
- 电气安全基础知识安全培训
- 部门保密培训课件
- 福建省南平市2024-2025学年八年级下学期期末考试数学试卷(含答案)
- 电网工程设备材料信息参考价2025年第一季度
- SLAP损伤的治疗课件
- 以理解为中心的历史教育 西安张汉林 全国历史教育专家2016年夏高考研讨会最新材料
- 拆除锅炉施工方案
评论
0/150
提交评论