树控件在项目被经常使用,dtree.js这个脚本也被广泛使用,在服务端用起来有些不太方便,我写了以下一个类,是对dtree.js的包装。

代码

1 using System;
2  using System.Collections.Generic;
3  using System.Linq;
4  using System.Text;
5 using System.Web.UI.WebControls;
6
7 namespace Library.WebControls
8 {
9 publicclass Tree : Node
10 {
11 //仅有一个根结点
12 privatestatic Node _rootNode =null;
13 privateconstint _treePid =-1;
14 privateconstint _id =0;
15 privatereadonlystaticstring _openstream =@"a.openTo({0},true,false);";
16 privatestring _keepopennodestream =string.Empty;
17
18 public Node Root
19 {
20 get
21 {
22 return _rootNode;
23 }
24 }
25
26 public Tree(string nodeText)
27 {
28 _rootNode =new Node(_id, _treePid, nodeText);
29 //新建树节点时重新分配节点集
30 Node._nodeList =new List<Node>();
31 //树根
32 base.Add(_rootNode);
33 }
34
35 ///<summary>
36 /// 新建时默认打一个节点
37 ///</summary>
38 ///<param name="value"></param>
39 publicvoid KeepOpenNode(int value)
40 {
41 _keepopennodestream =string.Format(_openstream, value);
42 }
43
44 ///<summary>
45 /// 渲染树节构
46 ///</summary>
47 ///<returns></returns>
48 publicnewstring Render()
49 {
50 StringBuilder sb =new StringBuilder();
51 sb.Append("a = new dTree('a');");
52 sb.Append("a.config.useCookies=true;");
53 //递归渲染叶
54 sb.Append(base.Render());
55 if (!string.IsNullOrEmpty(_keepopennodestream))
56 {
57 sb.Append(_keepopennodestream);
58 }
59 return sb.ToString();
60 }
61
62 }
63
64 publicclass Node
65 {
66
67 #region 内部量
68 privateint _id;
69 privateint _pid;
70 privatestring _text;
71 privatestring _url ="about:blank";
72 privatestring _mouseovertip ="";
73 privatestring _target ="";
74 privatestring _nodestruct =@"a.add({0},{1},'{2}','{3}','{4}','{5}');";
75 privatestring _writestream ="";
76 ///<summary>
77 /// 全树仅一个节点集
78 ///</summary>
79 internalstatic List<Node> _nodeList =null;
80 #endregion
81
82 #region 外部属性
83 publicint Id
84 {
85 set
86 {
87 _id = value;
88 }
89 get
90 {
91 return _id;
92 }
93 }
94
95 publicint Pid
96 {
97 set
98 {
99 _pid = value;
100 }
101 get
102 {
103 return _pid;
104 }
105 }
106
107 publicstring Text
108 {
109 set
110 {
111 _text = value;
112 }
113 get
114 {
115 if (string.IsNullOrEmpty(_text)) return"";
116 return _text;
117 }
118 }
119
120 publicstring Url
121 {
122 set
123 {
124 _url = value;
125 }
126 get
127 {
128 if (string.IsNullOrEmpty(_url)) return"about:blank";
129 return _url;
130 }
131 }
132 publicstring MouseOverTip
133 {
134 set
135 {
136 _mouseovertip = value;
137 }
138 get
139 {
140 if (string.IsNullOrEmpty(_mouseovertip)) return"";
141 return _mouseovertip;
142 }
143 }
144 publicstring TarGet
145 {
146 set
147 {
148 _target = value;
149 }
150 get
151 {
152 if (string.IsNullOrEmpty(_target)) return"";
153 return _target;
154 }
155 }
156
157 internalint Count
158 {
159 get
160 {
161 return _nodeList.Count;
162 }
163 }
164
165 #endregion
166
167 #region 构造 Node()
168 public Node()
169 { }
170
171 ///<summary>
172 /// 构造一个node点
173 ///</summary>
174 ///<param name="id">当前ID号</param>
175 ///<param name="pid">父ID号</param>
176 ///<param name="text">显示文本</param>
177 public Node(int id, int pid, string text)
178 {
179 _id = id;
180 _pid = pid;
181 _text = text;
182 }
183 ///<summary>
184 /// 构造一个node点
185 ///</summary>
186 ///<param name="id">当前ID号</param>
187 ///<param name="pid">父ID号</param>
188 ///<param name="text">显示文本</param>
189 ///<param name="url">连接地址</param>
190 public Node(int id, int pid, string text, string url)
191 {
192 _id = id;
193 _pid = pid;
194 _text = text;
195 _url = url;
196 }
197 ///<summary>
198 /// 构造一个node点
199 ///</summary>
200 ///<param name="id">当前ID号</param>
201 ///<param name="pid">父ID号</param>
202 ///<param name="text">显示文本</param>
203 ///<param name="url">连接地址</param>
204 ///<param name="mouseovertip">鼠标悬浮时显示</param>
205 ///<param name="target">框架名</param>
206 public Node(int id, int pid, string text, string url, string mouseovertip, string target)
207 {
208 _id = id;
209 _pid = pid;
210 _text = text;
211 _url = url;
212 _mouseovertip = mouseovertip;
213 _target = target;
214 }
215 ///<summary>
216 /// 构造一个node点
217 ///</summary>
218 ///<param name="id">当前ID号</param>
219 ///<param name="pid">父ID号</param>
220 ///<param name="text">显示文本</param>
221 ///<param name="url">连接地址</param>
222 ///<param name="target">框架名</param>
223 public Node(int id, int pid, string text, string url, string target)
224 {
225 _id = id;
226 _pid = pid;
227 _text = text;
228 _url = url;
229 _target = target;
230 }
231
232 #endregion
233
234 #region 外部方法
235 ///<summary>
236 /// 外部渲染方法
237 ///</summary>
238 ///<returns></returns>
239 internalstring Render()
240 {
241 returnthis.Render(this.Count -1);
242 }
243
244 ///<summary>
245 /// 添加一个Node
246 ///</summary>
247 ///<param name="node"></param>
248 ///<returns></returns>
249 public Node Add(Node node)
250 {
251 _nodeList.Add(node);
252 return node;
253 }
254 #endregion
255
256 privatestring Render(int count)
257 {
258 if (_nodeList[count].Pid ==-1)
259 returnstring.Format(_nodestruct, _id, _pid, _text, _url, _mouseovertip, _target);
260 else
261 {
262
263 _writestream =string.Format(_nodestruct, _nodeList[count]._id,
264 _nodeList[count]._pid, _nodeList[count]._text,
265 _nodeList[count]._url, _nodeList[count]._mouseovertip,
266 _nodeList[count]._target);
267 return _writestream = (_nodeList[count -1].Render(count -1) + _writestream);
268 }
269 }
270
271 }
272 }

使用方法:

代码

1 publicpartialclass DemoTree : System.Web.UI.Page
2 {
3 protected Tree tree =new Tree("测试树");
4 protectedvoid Page_Load(object sender, EventArgs e)
5 {
6 this.InitScript();
7 }
8 protectedoverridevoid OnInit(EventArgs e)
9 {
10 Node node = tree.Add(new Node(1, tree.Root.Id, "根1", "#"));
11 Node node2 = tree.Add(new Node(2, tree.Root.Id, "根2", "#"));
12 Node node3 = tree.Add(new Node(3, tree.Root.Id, "根3", "#"));
13
14 Node nodelist = node.Add(new Node(4, node.Id, "叶1", "#"));
15 Node nodelist2 = node.Add(new Node(5, node.Id, "叶2", "#"));
16
17 Node nodelist3 = node3.Add(new Node(6, node3.Id, "子叶1", "#"));
18 Node nodelist4 = node3.Add(new Node(7, node3.Id, "子叶2", "#"));
19 Node nodelist5 = node3.Add(new Node(8, node3.Id, "子叶3", "#"));
20
21 Node nodelist6 = nodelist5.Add(new Node(9, nodelist5.Id, "子子叶1", "#"));
22
23 base.OnInit(e);
24 }
25
26
27
28 protectedvoid InitScript()
29 {
30 Type type = GetType();
31 if (ClientScript.IsStartupScriptRegistered(type, "TreeScript") ==false)
32 {
33 string strScript =@"<script language=javascript>"+ tree.Render() +"document.write(a);</script>";
34
35 ClientScript.RegisterStartupScript(type, "TreeScript", strScript);
36 }
37 }
38
39 }
40

转载于:https://www.cnblogs.com/shouhongxiao/archive/2010/03/10/1682270.html

对客户端树控件的包装相关推荐

  1. asp.net DataGridTree表格树控件 下拉树 DropTree c# .net

    1.下拉树 DropTree c# .net 下拉树实现原理 输出json到客户端 客户端实现动态加载 中间不会和服务端交互 数据量支持上 经测试 几千 还是很快的 本下拉树控件是用c#+js树实现 ...

  2. 漂亮的JS树控件,自带8个皮肤(dhtmlxTree)

    dhtmlxTree(DHTML的扩展树)是一个功能丰富的JavaScript树形菜单 ,允许你轻松地创建有吸引力,快速装载能力下降层次树与跨浏览器兼容性,Ajax支持,在线节点编辑,和拖放的N -. ...

  3. Bootstrap树控件(Tree控件组件)使用经验分享

    前言:很多时候我们在项目中需要用到树,有些树仅仅是展示层级关系,有些树是为了展示和编辑层级关系,还有些树是为了选中项然后其他地方调用选中项.不管怎么样,树控件都是很多项目里面不可或缺的组件之一.今天, ...

  4. QT中树控件QTreeView开发实例

    转自:http://mobile.51cto.com/symbian-268700.htm 本文讲解了QT中树控件QTreeView开发实例,对于QTreeView没有过多的讲解,那么不说废话了,看代 ...

  5. SAP屏幕设计器专题:树控件的使用(九)

    在SAP的标准画面中,树控件都是随处可见,在一些特殊的应用中更有用处, 显得专业. 在SE51设计界面里,并没有直观的树控件,只是一个容器,要实现树功能还得在程序中用面向对象的方法实现. 本文就简要介 ...

  6. 树控件单击获取到的节点信息不是当前选中的节点_常用基本控件测试用例(一)...

    ​树控件的测试外观操作 1)项目中的所有树是否风格一致 2)树结构的默认状态是怎样的.比如默认树是否是展开,是展开几级? 是否有默认的焦点?默认值是什么?展开的节点图标和颜色? 3)验证点开节点时页面 ...

  7. [原创]FineUI秘密花园(二十四) — 树控件之数据绑定

    上一篇文章我们介绍了树控件的基本用法,不过都是通过标签来声明树控件的结构,本章我们会详细讲解如何在后台绑定树控件. 绑定到XmlDocument 下面通过一个简单的例子来看如何将XmlDocument ...

  8. MFC列表控件ListControl和树控件TreeControl

    列表控件 列表相关的类:CListCtrl-父类是CWnd,本质是一个控件: CListView-父类是CView,本质是一个视图.相当于在视图中嵌入了一个CListCtrl控件 列表控件的使用 1. ...

  9. VC树控件的简单使用

    //头文件声明     CTreeCtrl m_VersionTree; //在OnInitDialog()添加 CRect rc; GetClientRect(&rc);     bool ...

最新文章

  1. 关于内存管理-提前释放的问题
  2. 阿里云计算平台招AI解决方案产品经理
  3. 太厉害了!2021年互联网大厂Java笔经
  4. 在列表,字典,集合中根据条件来筛选数据
  5. 文献检索的正确姿势——新生培训
  6. mysql连接命令行,从命令行连接到MySQL
  7. jdk下载安装并配置环境
  8. flask框架+pygal+sqlit3搭建图形化业务数据分析平台
  9. Ubuntu下Truffle框架的搭建 2022年最新版
  10. mysql 事务不生效_@Transactional事务不生效的几种解决方案
  11. python基础:sys模块
  12. archlinux下Thinkpad的trackpoint配置
  13. C语言 怎么求字符串的长度,实例讲解(简洁)
  14. 使用 React-Sketchapp
  15. 010Java知识点小结--抽象类、接口
  16. 2022家博会正式开幕:国保保密科技体验馆邀您共襄盛举,共谋商机!
  17. 计算机桌面截图怎么截,电脑如何截图,教您电脑截图怎么截
  18. 如何搭建团队知识管理体系?从入门到精通,你只差……
  19. JUnit和mockito
  20. 电信新势力,TIP/CORD能颠覆电信设备商吗?

热门文章

  1. python 字符串分割
  2. verilog奇偶分频
  3. ATT全球网络运营中心GNOC
  4. JQuery Dialog UI按钮文字国际化
  5. Tomcat 6、7在EL表达式解析时存在的一个Bug
  6. 《『若水新闻』客户端开发教程》——08.设计新闻回复UI
  7. 移动开发之我见--“Android开发生涯”
  8. Java web(2012/2/22)
  9. Java异常处理 一
  10. 大话RabbitMQ 基础入门