一、简介:

  combotree控件是对combo(自定义下拉框)与tree(树)控件的扩展,它与combobox(下拉列表框)类似,但是它将下拉列表框的列表替换成了树。该控件支持树状态的复选框从而实现多选。

1、属性

树形下拉框的属性扩展自combo与tree,其重写的属性如下:

属性名 属性值类型 描述 默认值
editable boolean 定义用户是否可以直接输入文本到字段中。 false

2、方法

树形下拉框的方法扩展自combo(自定义下拉框),其重写和新增的方法如下:

方法名 方法参数 描述
options none 返回属性对象。
tree none 返回树形对象。以下的例子显示了如何得到选择的树节点。

var t = $('#cc').combotree('tree');  // 获取树对象
var n = t.tree('getSelected');       // 获取选择的节点
alert(n.text);
loadData data 读取本地树形数据。

代码示例:

$('#cc').combotree('loadData', [{id: 1,text: 'Languages',children: [{id: 11,text: 'Java'},{id: 12,text: 'C++'}]
}]);
reload url 再次请求远程树数据。通过'url'参数重写原始URL值。
clear none 清空控件的值。
setValues values 设置组件值数组。

代码示例:

$('#cc').combotree('setValues', [1,3,21]);
setValue value 设置组件值。

代码示例:

$('#cc').combotree('setValue', 6);

3、事件

该控件的事件完全继承自combo与tree.

二、用法

该控件有两种创建的方式:通过标签的方式创建以及通过javascript编程的方式创建,在下面的例子中着重以编程的方式实现。

html代码:

1

<input id="ProjectTree"  style="width: 300px;" />

1、本地数据源的加载

通过继承自tree的"data"属性来实现:

1

2

3

4

5

6

7

8

9

10

11

12

13

$("#ProjectTree").combotree({

                data: [{

                    text: 'Item1',

                    state: 'closed',

                    children: [{

                        text: 'Item11'

                    }, {

                        text: 'Item12'

                    }]

                }, {

                    text: 'Item2'

                }]

            });

效果图:

通过方法“loadData”实现:

HTML代码:

1

<input id="ProjectTree" class="easyui-combotree"  style="width: 300px;" />

js代码:

1

2

3

4

5

6

7

8

9

10

11

$("#ProjectTree").combotree("loaddata", [{

                text: 'Item1',

                state: 'closed',

                children: [{

                    text: 'Item11'

                }, {

                    text: 'Item12'

                }]

            }, {

                text: 'Item2'

            }]);

2、异步加载数据

在介绍异步加载数据之前,先讲解一下数据源的格式。其格式为json,每个节点都具备一下属性:

  • id:节点ID,对加载远程数据很重要。

  • text:显示节点文本。

  • state:节点状态,'open' 或 'closed',默认:'open'。如果为'closed'的时候,将不自动展开该节点。

  • checked:表示该节点是否被选中。

  • attributes: 被添加到节点的自定义属性。

  • children: 一个节点数组声明了若干节点。

数据源格式举例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

[{   

    "id":1,   

    "text":"Folder1",   

    "iconCls":"icon-save",   

    "children":[{   

        "text":"File1",   

        "checked":true

    },{   

        "text":"Books",   

        "state":"open",   

        "attributes":{   

            "url":"/demo/book/abc",   

            "price":100   

        },   

        "children":[{   

            "text":"PhotoShop",   

            "checked":true

        },{   

            "id": 8,   

            "text":"Sub Bookds",   

            "state":"closed"

        }]   

    }]   

},{   

    "text":"Languages",   

    "state":"closed",   

    "children":[{   

        "text":"Java"

    },{   

        "text":"C#"

    }]   

}] 

异步加载数据举例:

前端js代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

//构造项目树

           $("#ProjectTree").combotree({

               url: "Ajax.ashx",

               valueField: "id",

               textField: "text",

               lines: true,               

               queryParams: {

                   ParamType: "Init",

                   Action: "GetProjectTree",

                   M: Math.random()

               },

               onBeforeSelect: function (node) {

                  // debugger;

                   if (!$(this).tree('isLeaf', node.target)) {

                       $(this).combo("showPanel");

                       return false;

                   }                

               }

               

           });

在这里我是通过一般处理程序来接受传递到后台的参数然后进行一系列的逻辑处理生成一个json。

三、在实现过程中遇到的问题以及解决方法记录

1、json的格式

http://baike.baidu.com/link?url=-NLPp39k0VtBHuPU0yER_K06ek_yTVzzXTzC05GwBuiAtIb-9HE7Ufgn85MbrjBXaeKUtxl_MnOPmumpv8n34q

2、C#中引号的嵌套

通过转义字符来实现:\"

3、如何生成combotree的数据源

  通过递归的算法来实现,直接上代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

/// <summary>

      /// 构造项目树

      /// </summary>

      /// <returns>返回Json格式的字符串</returns>

      public string GetProjectTree()

      {

          string Jsonstring = "[";

          DataTable dt = GetPorjectNodeById(0);

          foreach(DataRow dr in dt.Rows)

          {

              if(dr!=dt.Rows[dt.Rows.Count-1])//如果此时不是最后一行数据

              {

                  Jsonstring +='{'+ GetProjJson(dr)+'}'+',';

              }

              else

              {

                  //string a = GetProjJson(dr);

                  Jsonstring +='{'+ GetProjJson(dr)+'}';               

              }          

          }

          return Jsonstring+="]";

      }

      /// <summary>

      /// 获取根节点或某个父节点的子节点

      /// </summary>

      /// <param name="Parent_id"></param>

      /// <returns></returns>

      public DataTable GetPorjectNodeById(int Parent_id)

      {

          

          SqlParameter[] Sqlpara = new SqlParameter[] {

          new SqlParameter("@Parent_id",Parent_id)

          };

          return db.ExecuteDataTable("P_GetProjectInfr",Sqlpara);                    

      

      }

      /// <summary>

      /// 获取根节点的子节点

      /// </summary>

      /// <param name="dr"></param>

      /// <returns>返回json格式的字符串</returns>

      public string GetProjJson(DataRow dr)

      {

          string ProjectJson = "";

          ProjectJson = "\"id\":" + dr["type_sid"]

                       ",\"text\":\"" + dr["Name"]

                       "\",\"children\":";

          DataTable dt = GetPorjectNodeById(int.Parse(dr["type_sid"].ToString()));

          if (dt.Rows.Count != 0)

          {

              ProjectJson += "[";

              foreach(DataRow d in dt.Rows)

              {

                  if(d!=dt.Rows[dt.Rows.Count-1])

                  {

                      ProjectJson +="{"+GetProjJson(d)+"}"+",";

                  }

                  else

                  {

                      ProjectJson +="{"+GetProjJson(d)+"}";                   

                  }                                 

              

              }

              ProjectJson += "]";

          }

          else {

              ProjectJson += "null";           

          }

          return ProjectJson;

      }

  

3、combotree如何实现只允许选择叶子节点

原文网址:https://www.cnblogs.com/YanYongSong/p/5103123.html

参照网址:https://www.cnblogs.com/chanke/p/5707517.html

easyui学习记录:combotree的使用总结相关推荐

  1. Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)

    Pytorch学习记录-torchtext和Pytorch的实例1 0. PyTorch Seq2Seq项目介绍 1. 使用神经网络训练Seq2Seq 1.1 简介,对论文中公式的解读 1.2 数据预 ...

  2. HTML5与CSS3权威指南之CSS3学习记录

    title: HTML5与CSS3权威指南之CSS3学习记录 toc: true date: 2018-10-14 00:06:09 学习资料--<HTML5与CSS3权威指南>(第3版) ...

  3. springboot @cacheable不起作用_Springboot学习记录13 使用缓存:整合redis

    本学习记录的代码,部分参考自gitee码云的如下工程.这个工程有详尽的Spingboot1.x教程.鸣谢! https://gitee.com/didispace/SpringBoot-Learnin ...

  4. 【Cmake】Cmake学习记录

    Cmake学习记录 1.1 常例 add_library(gen_reference_infogen_reference_info/gen_reference_info.hgen_reference_ ...

  5. ASP.NETCore学习记录(一)

    ASP.NETCore学习记录(一) asp.net core介绍  Startup.cs  ConfigureServices  Configure  0. ASP.NETCore 介绍 ASP.N ...

  6. Android开发技术周报176学习记录

    Android开发技术周报176学习记录 教程 当 OkHttp 遇上 Http 2.0 http://fucknmb.com/2018/04/16/%E5%BD%93OkHttp%E9%81%87% ...

  7. add函数 pytorch_Pytorch学习记录-Pytorch可视化使用tensorboardX

    Pytorch学习记录-Pytorch可视化使用tensorboardX 在很早很早以前(至少一个半月),我做过几节关于tensorboard的学习记录. https://www.jianshu.co ...

  8. java之字符串学习记录

    java之字符串学习记录 public class StringDemo { public static void main(String[] args) { //静态初始化字符串 String s1 ...

  9. Redis的学习记录

    Redis的学习记录 1.先导了解 1.1 NOSQL概述 1.1.1 为什么要用NoSql? 1.1.2 NoSql了解 1.1.3 NoSql特点 1.1.4 NoSQL的四大分类 2. Redi ...

最新文章

  1. 如何在arXiv上发表一篇文章
  2. 南京大学《物联网技术导论》课程
  3. python中ndarray和matrix
  4. python 怎么在一行获取多个数字
  5. GDataXML解析XML文档
  6. 【Linux】一步一步学Linux——gzip命令(63)
  7. Excel 2016双击无法打开文件的解决办法
  8. Android动态日志,一个简单的Android日志类
  9. python开发流程视频_自学Python的步骤和方法,Python入门全面视频无偿分享,使用Python开发的一些优点...
  10. E20170618-hm
  11. 备忘录模式-Memento
  12. 大数据思维与技术——中国大学MOOC课程笔记
  13. 如何使用 JQuery 提交 AJAX 表单
  14. [项目实战篇] Emos在线办公小程序--搭建项目
  15. windows运行中自定义命令创建/自定义bat文件创建
  16. GMS:基于网格运动统计的快速极度鲁棒的特征匹配
  17. Redis缓存雪崩/穿透/击穿
  18. Centi和HandCash共同开发支付握手协议
  19. Linux中磁盘读写速度测试
  20. 要成为游戏开发人员需要有以下书籍(二)

热门文章

  1. idea创建spring boot项目初始时pom报错解决
  2. Foreach遍历原理
  3. php开源微商系统,Thinkphp5.0开发的一款新微商新零售系统整站源码(带安装教程)...
  4. Android逆向之smali语法
  5. 微信小程序引入外部iconfont 字体 不显示原因分析
  6. pymongo最大查询限制
  7. 每年假期 23 天起的英伟达,单日市值暴涨 2000 亿美元!
  8. 重庆市中小学校80万家长用上校讯通
  9. java生成随机数,生成唯一hash值
  10. git | 新建分支与删除分支