XML(二)--例子

本例子实现以下几个功能

1.递归xml绑定到treeview控件,并且显示。

2.递归寻找treeview中哪些checkbox被选中

3.递归获取选中checkbox的值,并且存入容器中,并且显示出来


代码例子要用的xml结构

<?xml version="1.0" encoding="utf-8" ?>
<Company Cname="慧能芯图">
<部门1>
  <张三></张三>
  <小明></小明>
</部门1>
<部门2>
  <李四></李四>
  <王五></王五>
</部门2>
<部门3>
  <李刚></李刚>
  <赵宇></赵宇>
</部门3>
<部门4>
  <李哄></李哄>
  <赵天></赵天>
</部门4>
</Company>


页面部分截图



功能一实现:

       private void btn_GetInfo_Click(object sender, EventArgs e)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(@"D:\xml递归\xmlOperate\xmlOperate\Information.xml");
            BindXml(doc);
        }


        #region 绑定信息
        private void BindXml(XmlDocument doc)
        {
            //取得根节点Company
            XmlNode root = doc.SelectSingleNode("Company");
            string name = root.Attributes["Cname"].Value.ToString();//获取属性值
            TreeNode treeroot = new TreeNode(name);
            trvshow.Nodes.Add(treeroot); //添加根节点
            BindTreeView(root, treeroot); //递归调用,绑定到treeview控件上
            // trvshow.ExpandAll();  //是否全部展开
        }


        private void BindTreeView(XmlNode node,TreeNode tn)
        {
            foreach(XmlNode xn in node.ChildNodes)
            {
                TreeNode childnode = new TreeNode(xn.Name.ToString());
                childnode.Name = xn.Name.ToString();
                if(xn.ChildNodes.Count==0) //最底层节点,无孩子节点
                {   
                    childnode.Text = xn.Name.ToString();//这个地方根据不同的xml稍微改动,是取InnerText还是Name
                }
                tn.Nodes.Add(childnode);
                if (xn.ChildNodes.Count > 0)  //如果有子孩子继续递归遍历
                {
                    BindTreeView(xn, childnode);
                }           
            }
        }
        #endregion


功能二实现:
   private void trvshow_AfterCheck(object sender, TreeViewEventArgs e)
        {
            if(e.Action!=TreeViewAction.Unknown)
            {
                /*
           * 因为每个节点复选框的状态改变后都会引发 AfterCheck 事件,


           * 我们为了避免无限次地进入递归中,就需要判断TreeViewAction的状态,


           * 所有被我们使用代码自动选中的节点的TreeViewAction 状态为 Unknown,


           * 因为可以避免我们调用递归过程的时候出问题。

           */  
                CheckAllChildBox(e.Node, e.Node.Checked);
                #region 当所有子节点选中,使父节点选中
                bool bolChecked = true;
                //当所有子节点选中时,父节点勾选
                if(e.Node.Parent!=null)
                {
                    for (int i = 0; i < e.Node.Parent.Nodes.Count;i++)
                    {
                        if(e.Node.Parent.Nodes[i].Checked==false)
                        {
                            bolChecked = false;
                        }
                    }
                    e.Node.Parent.Checked = bolChecked;
                }
                #endregion


            }
        }


        #region   检查所有的checkbox是否选中
        private void CheckAllChildBox(TreeNode treeNode, bool IsCheck)
        {
           foreach(TreeNode tn in treeNode.Nodes)
           {
               tn.Checked = IsCheck;
               if(tn.Nodes.Count>0)
               {
                   CheckAllChildBox(tn, tn.Checked);
               }
           }
        }
        #endregion


功能三实现:

   List<TreeNode> selectNodes = new List<TreeNode>();

  private void btn_GetCheckInfo_Click(object sender, EventArgs e)
        {  

             if(selectNodes.Count!=0)

             {

                TreeNodeCollection tnodes = trvshow.Nodes; //获取treeview的子节点的集合           
               GetSelectedTreeNode(tnodes, selectNodes); //递归调用获取选中的node节点存入selectNodes
                ShowSelectNodesInfo(selectNodes);//显示selectNodes中的信息

           }
          
        }


        private void ShowSelectNodesInfo(List<TreeNode> selectNodes)
        {
            StringBuilder sb = new StringBuilder();
            foreach(TreeNode tn in selectNodes)
            {
                sb.Append(tn.Name.ToString());
                sb.Append(",");
            }
            string c = sb.ToString().Substring(0, sb.Length - 1);
            MessageBox.Show(c.ToString());
        }


        private void GetSelectedTreeNode(TreeNodeCollection tnodes, List<TreeNode> selectNodes)
        {
            foreach(TreeNode node in tnodes)
            {
                if(node.Checked)
                {
                    selectNodes.Add(node);
                }
                GetSelectedTreeNode(node.Nodes, selectNodes);
            }
        }


程序运营图:

功能1


功能2:


功能3:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值