热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ComponentArtTreeView树型控件父子联动实现(CheckBox全选)

最近在一个项目里面用到了ComponentArt中的TreeView,一个字“强”但后面遇到一个问题,就是当节点有子节点的时候,甚至子节

         最近在一个项目里面用到了 ComponentArt 中的 TreeView ,一个字 “强”  
         但后面遇到一个问题,   就是当节点有子节点的时候,甚至子节点又有子节点的时候,节点的 CheckBox 联动问题。
         很多情况下,当选择一个节点的时候,需要将节点下面的所有子节点全选,相应的,当取消的时候,也要将节点下面的子节点全部取消选择。而在有的时候选择一个节点,需要将节点的父节点选中,不是吗。
         遗憾的是 ComponentArt TreeView 没有提供该功能,汗!!! 相信有好多朋友也曾碰到过这样的问题吧,
         唉!人们都说人无完人,更别说控件了,ComponentArt TreeView 在我看来还是比较优秀的,还好,自己还懂点JS,把控件生成的JS 拷出来看了下,,原来问题还是好解决的。
         少说话,多做事,废话说得太多了,共享一下我的解决方法,希望对大家有所帮助。
         直接将以下JS代码放如页面即可

 1
 2 window.attachEvent( " onload " , function ()
 3 {
 4    window.ComponentArt_HandleCheck=function(qzAiy, postbackId, storageIndex)
 5    {
 6        var qzm = qze.qzo(storageIndex);
 7        var treeDiv=eval(qzm.ParentTreeView.ControlId.replace(/\$/g,"_")+"_div");
 8        qzm.Checked = qzAiy.checked;
 9        qzm.SaveState();
10        if(qze.ClientSideOnNodeCheckChanged)
11        {
12            qzm.ResolveAncestors();
13            qze.ClientSideOnNodeCheckChanged(qzm);
14        }

15        ;
16        if(qzm.AutoPostBackOnCheckChanged)
17        {
18            __doPostBack(qze.ControlId, 'CHECK ' + qzm.PostBackID + ' ' + qzm.Checked);
19            return;
20        }

21        
22        if(qzAiy.checked==true)
23        {
24            CheckParentNode(treeDiv,qzm,qzAiy.checked)
25        }

26        qzm.ExpandAll();
27        qzm.Expand();
28        CheckChildNode(treeDiv,qzm,qzAiy.checked);
29    }

30}
)
31     
32 function  CheckParentNode(treeDiv,node,value)
33 {
34    if(node!=null)
35    {
36        var pNode=node.GetParentNode()
37        if(pNode!=null)
38        {
39            try
40            {
41                treeDiv.all("checker_p"+pNode.StorageIndex.toString(16).toUpperCase()).checked=value;
42            }
catch(e){}
43            pNode.Checked=value;
44            pNode.SaveState()
45            CheckParentNode(treeDiv,pNode,value);
46        }

47    }
                
48}

49
50 function  CheckChildNode(treeDiv,node,value)
51 {
52    var nodes=node.Nodes();
53    for(var i=0;i<nodes.length;i++)
54    {
55        try
56        {
57            treeDiv.all("checker_p"+nodes[i].StorageIndex.toString(16).toUpperCase()).checked=value;
58        }
catch(e){}
59        nodes[i].Checked=value;
60        nodes[i].SaveState();
61        CheckChildNode(treeDiv,nodes[i],value);
62    }

63}

64

         以上是针对 ComponentArt Web.UI 2.1.2171.30367 版本,而另一个版本ComponentArt Web.UI 2006.2.1477.1代码如下

 1
 2 function  ArtCheckAll() 
 3 {
 4    ComponentArt_TreeViewNode.prototype.SetProperty = function(qztk, value, bSaveData,isEventFire)
 5    {
 6       var bSet = false;
 7       for(var qzba = 0; qzba < this.Data.length; qzba ++ )
 8       {
 9          if(this.Data[qzba][0== qztk)
10          {
11             this.Data[qzba][1= value;
12             bSet = true;
13             break;
14          }

15       }

16
17       if! bSet)
18       {
19          this.Data[this.Data.length] = [qztk, value];
20       }

21
22       this[qztk] = value;
23       if(qztk=="Checked" && isEventFire!=true && event && event.srcElement.tagName=="INPUT" && event.srcElement.type=="checkbox")
24       {
25            var needRefresh=SaveCheckedChildNodes(this,value)
26               if(value)
27               {
28                   needRefresh=needRefresh || CheckParentNode(this,value)
29               }

30               
31               if(needRefresh)
32               {
33                   this.ExpandAll();
34                this.Expand();
35            }

36        }

37    }

38    
39    function SaveCheckedChildNodes(parentNode,value)
40    {
41        var r=false;
42        var nodes=parentNode.Nodes();
43        for(var i=0;i<nodes.length;i++)
44        {
45            if(nodes[i].Checked!=value)
46            {
47                r=true;
48                nodes[i].Checked=value;
49                nodes[i].SetProperty("Checked",value,true,true)
50            }

51            SaveCheckedChildNodes(nodes[i],value);
52        }

53        return r;
54    }

55    
56    function CheckParentNode(node,value)
57    {
58        var r=false;
59        if(node!=null)
60        {
61            var pNode=node.GetParentNode()
62            if(pNode!=null)
63            {
64                if(pNode.Checked!=value)
65                {
66                    r=true;
67                    pNode.Checked=value;
68                    pNode.SetProperty("Checked",value,true,true)
69                }

70                CheckParentNode(pNode,value);
71            }

72        }

73        return r;    
74    }

75}

76
77 window.attachEvent( " onload " ,ArtCheckAll)
         以上方法,只对IE适用
         欢迎访问 http://www.cnblogs.com/kuiyouli

推荐阅读
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 本文介绍了一种使用 JavaScript 计算两个日期之间时间差的方法。该方法支持多种时间格式,并能返回秒、分钟、小时和天数等不同精度的时间差。 ... [详细]
  • 本地存储组件实现对IE低版本浏览器的兼容性支持 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 检查在所有可能的“?”替换中,给定的二进制字符串中是否出现子字符串“10”带 1 或 0 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 在 JavaScript 中,浮点数的除法运算常常会出现精度问题。本文介绍了一种方法,通过自定义函数来精确控制除法运算结果的小数位数,确保计算结果的准确性。该方法不仅适用于除法,还可以扩展到其他浮点数运算,有效避免了 JavaScript 在处理浮点数时常见的精度误差。 ... [详细]
  • 如何使用 `org.eclipse.rdf4j.query.impl.MapBindingSet.getValue()` 方法及其代码示例详解 ... [详细]
  • 本文全面解析了 Python 中字符串处理的常用操作与技巧。首先介绍了如何通过 `s.strip()`, `s.lstrip()` 和 `s.rstrip()` 方法去除字符串中的空格和特殊符号。接着,详细讲解了字符串复制的方法,包括使用 `sStr1 = sStr2` 进行简单的赋值复制。此外,还探讨了字符串连接、分割、替换等高级操作,并提供了丰富的示例代码,帮助读者深入理解和掌握这些实用技巧。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 在 Vue 应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍 Vue Router 提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。 ... [详细]
author-avatar
相依相伴一起慢慢变老
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有