设置kendo ui TreeView控件显示半选状态的记录

原因:

  treeview的数据源比较大,如果子级同时包含选中的项和未选中的项,那么父级应该是“半选”的状态,如下图:

  

 

   但是默认情况下,直接把数据给treeView以后,他不会显示半选,如下图:

  

 

   虽然子级有一个未选中的项,但是在文件夹不展开的情况下,他显示的是未选中,必须全部展开的情况下才会正常,或者使用下面的方法调用才会正常:

var treeview = $("#treeview").data("kendoTreeView");
treeview.updateIndeterminate();

  但是如果数据量大,不管是展开或是调用上面的那个方法,速度都会很慢,我们这里测试的,得有几十秒的时间等待。

 解决方案:

  在databind方法里手工处理一下半选中的状态,示例如下:

          dataBound: function(e) {
                    updateTree();
                  }
  function updateTree() 
  {
    $('input:checkbox').each(function(){
      var item=$(this)[0];
      item.indeterminate = true;
    });
  };

上面的方法是把所有的checkbox转换为“半选”的状态。

实际工作中,只要把需要“半选”的节点告诉treeView就可以了

  

        function updateTree() {
            var treeView = $('#treeViewCaseFolder').data('kendoTreeView');
            for (var i = 0; i < indeterminateList.length; i++) {
                var data = treeView.dataSource.get(indeterminateList[i]);
                if (data) {
                    var selectitem = treeView.findByUid(data.uid);
                    selectitem.find("input:checkbox")[0].indeterminate = true;
                }
            }
        };
上面代码中的indeterminateList这个变量就是需要改为“半选”状态的所有数据的id。
posted @ 2020-10-17 19:11  星星c#  阅读(260)  评论(0编辑  收藏  举报