FineUI 官方论坛

标题: 重复NodeID节点树的全选或全不选问题 [打印本页]

作者: 雏鸟    时间: 2014-2-13 23:39
标题: 重复NodeID节点树的全选或全不选问题
本帖最后由 雏鸟 于 2014-2-13 23:41 编辑

我有一树,可能分多层,但同一层下的节点NodeID不可能相同,不同层下的节点NodeID有重复的,如何实现全选或全不选。树的XML文件如下
<?xml version="1.0" encoding="utf-8" ?>
<Tree >
  <TreeNode Text="水情" Expanded="true" NodeID="ZZ" EnableCheckBox="true" EnablePostBack="true" AutoPostBack="true"  >
    <TreeNode Text="吉首市" Expanded="true" NodeID="吉首市_Z5" EnableCheckBox="true" EnablePostBack="true" AutoPostBack="true" >
      <TreeNode Text="河溪"  NodeID="613H0000"  ToolTip="Zu" EnableCheckBox="true" EnablePostBack="true" Expanded="true"  AutoPostBack="true" />
      <TreeNode Text="狮子庵" NodeID="613H0001" ToolTip="Zu" EnableCheckBox="true" EnablePostBack="true" Expanded="true" AutoPostBack="true"  />   
    </TreeNode>
    <TreeNode Text="保靖县" Expanded="true" NodeID="保靖县_Z10" EnableCheckBox="true"  EnablePostBack="true" AutoPostBack="true" >
      <TreeNode Text="泗溪站"  NodeID="BJH00001"  ToolTip="Zu" EnableCheckBox="true" EnablePostBack="true" Expanded="true" AutoPostBack="true" />
      <TreeNode Text="县城酉水河站" NodeID="BJH00002" ToolTip="Zu" EnableCheckBox="true" EnablePostBack="true" Expanded="true" AutoPostBack="true"  />   
    </TreeNode>
  </TreeNode>
  <TreeNode Text="雨情" Expanded="true" NodeID="PP" EnableCheckBox="true"  EnablePostBack="true" AutoPostBack="true" >
    <TreeNode Text="保靖县" Expanded="true" NodeID="保靖县_P37" EnableCheckBox="true"  EnablePostBack="true" AutoPostBack="true"  >
      <TreeNode Text="泗溪站" NodeID="BJH00001" ToolTip="P" EnableCheckBox="true" EnablePostBack="true" Expanded="true" AutoPostBack="true"  />
      <TreeNode Text="水田河站"  NodeID="BJH00002"  ToolTip="P" EnableCheckBox="true" EnablePostBack="true" Expanded="true" AutoPostBack="true" />
    </TreeNode>
    <TreeNode Text="古丈县" Expanded="true" NodeID="古丈县_P42" EnableCheckBox="true" EnablePostBack="true" AutoPostBack="true" >
      <TreeNode Text="县水务局" NodeID="613H4019" ToolTip="P"  EnableCheckBox="true" EnablePostBack="true" Expanded="true" AutoPostBack="true"  IconUrl="~/ShImages/Pstation.ico"/>
      <TreeNode Text="断龙"  NodeID="613H4020"  ToolTip="P"  EnableCheckBox="true" EnablePostBack="true" Expanded="true" AutoPostBack="true" />     
    </TreeNode>
  </TreeNode>
</Tree>


树的NodeCheck后台事件:
   protected void Tree1_NodeCheck(object sender, TreeCheckEventArgs e)
        {
            if (e.Checked)
            {
                this.ddlDeltaT.Items.Clear();
                // this.Tree1.CheckAllNodes(e.Node.Nodes);
                Checked_TreeNode(e.Node.Nodes);

                Boolean isZZ = false;
                Boolean isPP = false;

                foreach (FineUI.TreeNode node in e.Node.Nodes)
                {
                    if (node.ToolTip.Trim().IndexOf("Z") > -1 || node.ToolTip.Trim().IndexOf("z") > -1 || e.Node.Text == "水情")
                    {
                        isZZ = true;
                        isPP = false;
                    }

                    if (node.ToolTip.Trim().IndexOf("P") > -1 || node.ToolTip.Trim().IndexOf("p") > -1 || e.Node.Text == "雨情")
                    {
                        isPP = true;
                        isZZ = false;
                    }
                }

                if (isZZ == true)
                {   
                    foreach (FineUI.TreeNode node in this.Tree1.Nodes)
                    {
                        if (node.Text == "雨情" || node.NodeID.ToString() == "PP" || node.NodeID.ToString() == "pp")
                        {
                            node.Checked = false;
                            // this.Tree1.UncheckAllNodes(node.Nodes);
                            unCheck_TreeNode(node.Nodes);
                        }
                    }
                }

                if (isPP == true)
                {
                    foreach (FineUI.TreeNode node in this.Tree1.Nodes)
                    {
                        if (node.Text == "水情" || node.NodeID.ToString() == "ZZ" || node.NodeID.ToString() == "zz")
                        {
                            node.Checked = false;
                            // this.Tree1.UncheckAllNodes(node.Nodes);
                            unCheck_TreeNode(node.Nodes);
                        }
                    }                  
                }               
            }
            else
            {
                // this.Tree1.UncheckAllNodes(e.Node.Nodes);
                unCheck_TreeNode(e.Node.Nodes);               
            }
    }

                if (isPP == true)
                {     
                    //foreach (FineUI.TreeNode node in this.Tree1.Nodes)
                    //{
                    //    if (node.Text == "水情" || node.NodeID.ToString() == "ZZ" || node.NodeID.ToString() == "zz")
                    //    {
                    //        node.Checked = false;
                    //       // this.Tree1.UncheckAllNodes(node.Nodes);
                    //       // unCheck_TreeNode(node.Nodes);
                    //    }
                    //}
            }
            else
            {
                // this.Tree1.UncheckAllNodes(e.Node.Nodes);
                // unCheck_TreeNode(e.Node.Nodes);
                }
            }
        }


树的全选和全不选事件
private void unCheck_TreeNode(FineUI.TreeNodeCollection xNodes)
        {
            foreach (FineUI.TreeNode iNode in xNodes)
            {
                iNode.Checked = false;
                if (iNode.Leaf)
                {
                    iNode.Checked = false;
                }

                if (iNode.Nodes.Count > 0)
                {
                    unCheck_TreeNode(iNode.Nodes);
                }
            }
        }

        private void Checked_TreeNode(FineUI.TreeNodeCollection xNodes)
        {
            foreach (FineUI.TreeNode iNode in xNodes)
            {
                iNode.Checked = true;
                if (iNode.Leaf)
                {
                    iNode.Checked = true;
                }

                if (iNode.Nodes.Count > 0)
                {
                    Checked_TreeNode(iNode.Nodes);
                }
            }
        }


我希望达到的效果:
1、选择水情节点下的任何子节点时,雨情节点全不选,不管NodeID ;反之亦然;
2、选择具有子节点的节点时选中该节点和所有子节点;取消具有子节点的节点选中时取消该节点的所有子节点全不选;
代码出现的问题:
1、全选雨情节点时可以全不选水情的所有子节点,取消雨情节点全选中时,水情节点中与雨情节点中相同NodeID的节点被选中;
2、全选水情节点时,取消了雨情节点中所有的选中(正确效果)



作者: sanshi    时间: 2014-2-14 10:22
NodeID 不能有重复的
作者: 雏鸟    时间: 2014-2-14 13:35
看来我只有从NodeID处理了,人为截取规定的编码,相同编码的就加标识位




欢迎光临 FineUI 官方论坛 (https://fineui.com/BBS/) Powered by Discuz! X3.4