总结这次的工作,明白了几个关键的地方:
    1.如果在服务器端进行CheckBox的初始化,这样操作就会导致在客户端进行node.getAttribute("checked")时总是得到True,这样就达不到客户端操作的目的.
    2.如果想在生成树的时候对某些节点进行CheckBox的初始化选中,就需要在客户端进行遍历树的操作(构造生成树的同时进行).
    3.在客户端对树的节点进行选中与取消选中的操作时,必须同时进行一个必要的操作:Tree.queueEvent('oncheck',node.getNodeIndex()),这样做的目的使你在客户端进行树操作的同时,能让服务器端也同时知道操作了哪些节点,以便在服务器端进行遍历的同时能知道哪些节点被选中.
    4.以及'checked'的大小写问题也会对树的状态改变有所影响.

之后又对代码进行了优化,我把生成树时的初始化操作,以及保存选中状态都放在了客户端进行!

第一次发表文章,请各位前辈多多指导,多多帮助

var strArray = new Array();
var strList = "";

function tree_oncheck()
{
    var ChildNode = new Array();
    var node = document.getElementById("TreeView1").getTreeNode(event.treeNodeIndex);
    var Pchecked = node.getAttribute("checked");
    
    ChildNode =  node.getChildren();
    if( parseInt( ChildNode.length ) != 0 )
    {
       node.setAttribute("checked",!Pchecked);
       return;
    }
    setParent(node,Pchecked);
    document.getElementById("TreeView1").queueEvent('oncheck',node.getNodeIndex());
}
//===============================================//
//在点击子节点时,让父节点的状态也随子节点的状态而变化
//===============================================//
function setParent(el,state)
{
    var ParentNode = el.getParent();
    if(ParentNode)
    {
        //检查el的兄弟节点状态
        if(!checkSiblingdNode(el))
        {
            ParentNode.setAttribute('checked',state);
            setParent(ParentNode,state);
        }
    }
}

//===========================================//
//检查兄弟节点状态
//===========================================//
function checkSiblingdNode(el)
{
    var parentNode = el.getParent();
    var childNodes = new Array();
    childNodes = parentNode.getChildren();
            
    for(var i=0;i< childNodes.length; i++)
    {
        if(el.getNodeIndex() != childNodes[i].getNodeIndex())
        {
            if(childNodes[i].getAttribute("Checked"))
            {
                return true;
            }
        }
    }
    return false;
}
//=============================================//
//点击父节点时,对其子节点状态进行同步改变
//=============================================//
function setcheck(node,Pc)
{
    var ChildNode = new Array();
    ChildNode = node.getChildren();
    if( parseInt(ChildNode.length) != 0 )
    {
        for( var i=0; i<ChildNode.length;i++ )
        {
            var cNode = ChildNode[i];
            if( cNode.getAttribute("checked") != Pc )
            {
                if( parseInt( cNode.getChildren().length ) != 0 )
                    setcheck(cNode,Pc);
                cNode.setAttribute("checked",Pc);
                document.getElementById("TreeView1").queueEvent('oncheck',cNode.getNodeIndex());
            }
        }
    }
}
//==========================================//
//需要对某些节点做初始化处理时
//==========================================//
function onload()
{
    var node 
    var nextNode = 0;
    var childNodes = new Array();
    var childNodes = document.getElementById("TreeView1").getChildren();

    SetArray();//把节点ID组合为一个数组
    for(var i=0;i<childNodes.length;i++)
    {    
        SetTree(childNodes[i]);
    }
}
//============================================//
//组合数组
//============================================//
function SetArray()
{
    var IndexStart = 0;
    var IndexEnd = 0;
    var ArrIndex = 0;
    var SignStr = "";
    //var SpanString = "0001,00010001,000100010001,";
    var SpanString = document.getElementById("H_IncomeCode").value;
    var strLen = SpanString.length;
            
    while( IndexEnd < strLen )
    {
        SignStr = SpanString.substr(IndexEnd,1);
        if( SignStr == "," )
        {
            var TempString = SpanString.substr(IndexStart,IndexEnd-IndexStart);
            strArray[ArrIndex] = TempString;
                    
            IndexStart = IndexEnd + 1;
            ArrIndex = ArrIndex + 1;
        }
        IndexEnd = IndexEnd + 1;
    }
}
//==============================================//
//遍历整棵树,进行节点的Checked的初始化设置//
//==============================================//
function SetTree(node)
{
    var childNodes = new Array();
    childNodes = node.getChildren();
    var i = 0;
    var j = 0;
            
    for( i=0 ; i<strArray.length; i++ )
    {
        if( strArray[i] == node.getAttribute("ID") )
        {
            saveCheckState(node);
            node.setAttribute("checked","true");
                    //saveCheckState(node.getNodeIndex());
        }
    }
    if( parseInt(childNodes.length) != 0 )
    {
        for( j=0;j< parseInt(childNodes.length); j++)
        {
            for( i=0 ; i< parseInt(strArray.length); i++ )
            {
                if( strArray[i] == childNodes[j].getAttribute("ID") )
                {
                    saveCheckState(childNodes[j]);
                    childNodes[j].setAttribute("checked","true");
                    //saveCheckState(childNodes[j].getNodeIndex());
                }
            }
            SetTree(childNodes[j]);
        }
    }
    else
    {
        for( i=0 ; i<strArray.length; i++ )
        {
            if( strArray[i] == node.getAttribute("ID") )
            {
                saveCheckState(node);
                node.setAttribute("checked","true");
                //saveCheckState(node.getNodeIndex());
            }
        }
    }
}
//====================================================//
//保存节点状态(保证在回传时节点状态依然存在)
//====================================================//
function saveCheckState(el)
{
    if(el.getNodeIndex())
    {
        document.getElementById("TreeView1").queueEvent("oncheck",el.getNodeIndex().toString());
    }
}
//====================================================//
//点击保存按钮时对所选中的节点进行整理
//====================================================//
function FindChecked()
{
    strList = "";
    var ChildNodes = new Array();
    ChildNodes = document.getElementById("TreeView1").getChildren();
    for( var i=0; i<ChildNodes.length; i++ )
    {
        CheckedAll(ChildNodes[i]);
    }
    //alert(strList);
    doSelect(strList);
}
function CheckedAll(node)
{
    var i = 0;
    var strID;
    var childNodes = new Array();
    childNodes = node.getChildren();
            
    if( parseInt(childNodes.length) != 0 )
    {
        for( i=0; i<parseInt(childNodes.length); i++ )
        {
            CheckedAll(childNodes[i]);
        }
    }
    else
    {
        if( node.getAttribute("checked") == true )
        {
            strID = node.getAttribute("id");
            strList = strList + strID + ",";
        }
    }            
}

转载于:https://www.cnblogs.com/wskaihd/archive/2006/10/25/539011.html

(转)对微软那棵TreeView进行试用,主要是对CheckBox进行操作相关推荐

  1. 【原】TreeView+Checkbox级联操作(IE/FireFox测试通过)

    TreeView+Checkbox级联操作 步骤1.前台页面拖放一个Treeview,将其ShowCheckBoxes属性设置为All <asp:TreeView ID="tvCoun ...

  2. c# 利用 两个TREEVIEW控件完成TEENODE的鼠标拖动操作

    c# 利用 两个TREEVIEW控件完成TEENODE的鼠标拖动操作 功能说明: 我们有两个TREEVIEW控件--TREEVIEW1,TREEVIEW2.Treeview1内有三个NODE,Tree ...

  3. 我眼中的微软Azure:Microsoft Azure试用 注意

    使用过程中就一点需要注意,世纪互联提供的试用是中国版azure.这里的帐号和微软官网azure的帐号是不通的. 比如我在使用visual studio 2017发布程序到azure是无法使用试用版账号 ...

  4. 微软杀毒软件Microsoft Security Essentials试用

    前不久下了微软的免费杀毒软件Microsoft Security Essentials,但是一直太忙没有时间拿来测测.Microsoft Security Essentials的查杀引擎是mpengi ...

  5. 微软系统修复工具(试用版)

    Microsoft Fix it Center 使获得支持从未有过如此简单,因为自动疑难解 答程序将解决您的现有问题并防患于未然. 为您的设备定制了解决方案,仅显示与您的硬件 和软件相关的信息. Mi ...

  6. 最简单的Asp.Net 2.0 TreeView的Checkbox级联操作

    直接在TreeView的属性上加入:OnClick="OnTreeNodeChecked()" 或者:MyTree.Attributes.Add("OnClick&quo ...

  7. .Net 的 Web 项目中 关于TreeView 的 checkBox 的操作……

    XX.aspx页面中: <asp:TreeView ID="TreeView1" runat="server" ShowCheckBoxes=" ...

  8. 微软免费AI作文打分软件升级:雅思考研四六级都能用,还能查单词给替换

    赖可 发自 亚湾区 量子位 报道 | 公众号 QbitAI 练习英语写作一大困难就是:没有人帮我改. 现在可以找AI打分了. 亚洲研究院研发升级了以前的作文打分功能,命名为"微软爱写作&qu ...

  9. activex控件 新对象 ocx 初始化_Office已经支持64位的树控件Treeview了

    之前在使用Office365时发现微软其实已经悄悄地开始提供了64位的Treeview树控件,只是并没有公开宣布.当时是在一个网友的电脑上说他可以在64位Excel中可直接使用64位树控件,当时以为他 ...

最新文章

  1. 119.CSMA/CD
  2. 清空mysql注册表步骤_完全卸载MySQL 数据库清空MySql注册表
  3. WatchOS系统开发大全(1)-AppleWatch背景介绍
  4. Android Studio Linking an external C++ project 时候 报Invalid file name. Expected: CMakeLists.txt
  5. 前台如何解析json格式 以及后台如何生成json格式
  6. HBase 1.x Coprocessor使用指南
  7. 震惊!丧心病狂的夕小瑶推出新一轮写作计划!
  8. Storm 的可靠性保证测试
  9. 【微信插件】P3微信插件测试使用步骤
  10. nacos 本地测试_本地调试和服务器调试都无法连通-问答-阿里云开发者社区-阿里云...
  11. MPLS ××× Carrier Supporting Carrier Option AB(二)
  12. mysql间隙锁触发条件,详解系列文章
  13. useState使用和原理
  14. python中的连续比较是什么_Python算法的分治算法,python,之,连续,子,列表,最大,和...
  15. 计算机控制软件流程图,计算机控制系统的组成
  16. word自动生成目录和调整页码字体的方法
  17. 昆仑通泰触摸屏与PLC通讯故障处理
  18. 2019年2月已到,Java 8要收费了吗?
  19. 【STM32H750】玩转ART-Pi(二)——制作MDK的外部QSPI-FLASH烧录算法
  20. Win11后续更新计划:微软将逐步取消传统的控制面板功能

热门文章

  1. socket.io的基本使用
  2. Azure 执行模型
  3. linux 命令访问url: curl http://www.baidu.com/index.html
  4. 亚马逊AWS:正确设置FTP
  5. 奋斗---论门当户对
  6. 2016BAT+华为+滴滴+搜狗Android开发岗面试问题整理
  7. 自定义view-波纹扩散(圆扩散)
  8. Android10.0应用进程创建过程以及Zygote的fork流程-[Android取经之路]
  9. AndroidStudio2.2 Preview3中NDK开发之CMake和传统 JNI在目录结构和配置文件上的区别
  10. JVM判断对象是否已死?