FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 1431|回复: 2
打印 上一主题 下一主题

重复NodeID节点树的全选或全不选问题

[复制链接]
跳转到指定楼层
楼主
发表于 2014-2-13 23:39:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 雏鸟 于 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、全选水情节点时,取消了雨情节点中所有的选中(正确效果)


沙发
发表于 2014-2-14 10:22:14 | 只看该作者

回帖奖励 +1 金钱

NodeID 不能有重复的
板凳
 楼主| 发表于 2014-2-14 13:35:42 | 只看该作者
看来我只有从NodeID处理了,人为截取规定的编码,相同编码的就加标识位
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-11-27 13:36 , Processed in 0.044210 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表