上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下:

<ext:TreePanel runat="server"><Root><ext:Node Text="根节点" Expanded="true"><Children><ext:Node Text="节点1" Expanded="true"><Children><ext:Node Text="节点11" Leaf="true"></ext:Node><ext:Node Text="节点12" Leaf="true"></ext:Node></Children></ext:Node><ext:Node Text="节点2" Leaf="true"></ext:Node><ext:Node Text="节点3" Leaf="true"></ext:Node><ext:Node Text="节点4" Leaf="true"></ext:Node></Children></ext:Node></Root>
</ext:TreePanel>

这是一个使用标记来创建的树,我们还可以使用服务器端代码来创建,代码如下:

private void createTree()
{TreePanel tree = new TreePanel();tree.Root.Add(new Node() { Text = "根节点", Expanded = true });tree.Root[0].Children.Add(new Node() { Text = "节点1", Expanded = true });tree.Root[0].Children[0].Children.Add(new Node() { Text = "节点11", Leaf = true });tree.Root[0].Children[0].Children.Add(new Node() { Text = "节点12", Leaf = true });tree.Root[0].Children.Add(new Node() { Text = "节点2", Leaf = true });tree.Root[0].Children.Add(new Node() { Text = "节点3", Leaf = true });tree.Root[0].Children.Add(new Node() { Text = "节点4", Leaf = true });winTreeContainer.Add(tree);
}

异步加载树节点

在上面的代码中,我们都是一次性加载了所有节点,虽然在开发过程中比较方便,但与异步加载来说更加的耗资源,尤其是当树节点比较多的时候。

接下来让我们来构建一个异步加载的树。

<ext:TreePanel runat="server"><Root><ext:Node Text="根节点" NodeID="root" Expanded="false"></ext:Node></Root><Store><ext:TreeStore runat="server"><Proxy><ext:AjaxProxy Url="tree-handler.ashx"></ext:AjaxProxy></Proxy></ext:TreeStore></Store>
</ext:TreePanel>

在树的定义中南,我们为根节点添加了NodeID,然后为Tree添加了TreeStore,TreeStore通过ajax代理获取数据,获取数据的url为tree-handler.ashx处理程序,我们的处理程序代码为:

public void ProcessRequest(HttpContext context)
{//得到node idstring nodeId = context.Request["node"];//根据node id 进行处理NodeCollection nodes = new NodeCollection();nodes.Add(new Node() { Text = "节点1" });nodes.Add(new Node() { Text = "节点2" });nodes.Add(new Node() { Text = "节点3" });nodes.Add(new Node() { Text = "节点4" });string responseString = nodes.ToJson();context.Response.Write(responseString);context.Response.End();
}

在处理方法中,最主要的是第一句,从请求中得到node id,拿到node id之后,我们可以根据node id进行子节点的获取操作,我们的代码中是为了进行演示,所以并没有获取相应子节点的操作。

如果是在MVC中,我们可以使用StoreResult来作为Action的数据返回类型。

树节点的自定义属性

通常情况下,树节点所包含的的信息并不是我们完整的数据,我们需要添加一些自定义的属性,Ext.Net为我们提供这种功能:

第一步,我们需要在TreeStore中添加一个Model,这个Model中的字段就是我们自定义的属性。

<Store><ext:TreeStore runat="server">
        <Model><ext:Model runat="server"><Fields><ext:ModelField Name="CreateUser" Type="String"></ext:ModelField></Fields></ext:Model></Model><Proxy><ext:AjaxProxy Url="tree-handler.ashx"></ext:AjaxProxy></Proxy></ext:TreeStore>
</Store>

第二步,在生成节点的时候为我们自定义属性赋值。

public void ProcessRequest(HttpContext context)
{//得到node idstring nodeId = context.Request["node"];//根据node id 进行处理NodeCollection nodes = new NodeCollection();var node = new Node() { Text = "节点1" };node.CustomAttributes.Add(new ConfigItem("CreateUser", "qeefee"));nodes.Add(node);string responseString = nodes.ToJson();context.Response.Write(responseString);context.Response.End();
}

第三步,在前台代码中使用自定义属性

我们在树的底部添加一个panel,用来显示自定义的星系,然后添加一个事件,在节点选中的时候来更新panel的显示

<DockedItems><ext:Panel runat="server" Dock="Bottom" Height="30"><Tpl><Html><p>创建人:{CreateUser}</p></Html></Tpl></ext:Panel>
</DockedItems>
<Listeners><ItemClick Handler="MyApp.showDetail.call(#{treeDynamic}, record)"></ItemClick>
</Listeners>

事件的处理方法如下:

var MyApp = {showDetail: function (record) {var panel = this.getDockedItems("panel[dock=bottom]")[0];panel.update(record.data);}
};

在跟踪事件处理过程中,我们可以看到自定义属性的值:

它是和树节点的其他属性一起保存的,所以我们在使用record的时候,还可以方便的使用树节点的其他属性。

这个示例的效果图如下:

多列树(TreeGrid)

TreeGrid的效果如下图:

类似于GridPanel,有标题、多列的样式等。

又不同于GridPanel,因为它可以像树一样显示一个展开、折叠图标。

我们来看一下这个例子的代码:

<ext:TreePanel runat="server" ID="treeGrid"><Store><ext:TreeStore ID="TreeStore1" runat="server"><Model><ext:Model ID="Model1" runat="server"><Fields><ext:ModelField Name="CreateUser" Type="String"></ext:ModelField></Fields></ext:Model></Model><Proxy><ext:AjaxProxy Url="tree-handler.ashx"></ext:AjaxProxy></Proxy></ext:TreeStore></Store>
    <ColumnModel><Columns><ext:TreeColumn runat="server" Text="名称" DataIndex="text"></ext:TreeColumn><ext:Column runat="server" Text="创建人" DataIndex="CreateUser"></ext:Column></Columns></ColumnModel><Root><ext:Node Text="根节点" NodeID="root" Expanded="false"></ext:Node></Root>
</ext:TreePanel>

TreePanel的Store与之前例子相同,Root的配置也与之前的例子相同,唯一不同的是TreePanel中多了一个ColumnModel节点,这里面的配置和GridPanel的ColumnModel相同,TreeColumn列用来显示树的列,用起来很方便。

本文由起飞网原创首发,转载请注明出处。点击访问更多Ext.Net教程

原文链接:Ext.Net学习笔记22:Ext.Net Tree 用法详解

Ext.Net学习笔记22:Ext.Net Tree 用法详解相关推荐

  1. Java学习笔记之Pattern类的用法详解(正则表达式)

    转自:https://www.cnblogs.com/sparkbj/articles/6207103.html EG: //验证邮箱 public static final String REGEX ...

  2. 【相机标定与三维重建原理及实现】学习笔记1——相机模型数学推导详解

    目录 前言 一.小孔成像模型 二.坐标系的变换 1.世界坐标系到相机坐标系的变换(刚体变换)[xw^→xc^\boldsymbol {\hat{x_{w}}}\rightarrow \boldsymb ...

  3. SNMP学习笔记之SNMP 原理与实战详解

    原文地址:http://freeloda.blog.51cto.com/2033581/1306743 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法 ...

  4. RT-Thread学习笔记|TCS34725 RGB 颜色识别传感器详解

    rt-thread是什么? RT-Thread 是一个集实时操作系统(RTOS)内核.中间件组件和开发者社区于一体的技术平台,组件完整丰富.高度可伸缩.简易开发.超低功耗.高安全性的物联网操作系统.R ...

  5. HTML学习笔记3:HTML基本骨架详解

    在HTML笔记1中,我简单介绍了HTML抽象的基本框架,其实,HTML的基本骨架部分还有更多内容需要了解,这一节,咱们就详细学习HTML的基本骨架. 打开sublime编辑器,输入html:xt 图1 ...

  6. pytorch学习笔记(十二):详解 Module 类

    Module 是 pytorch 提供的一个基类,每次我们要 搭建 自己的神经网络的时候都要继承这个类,继承这个类会使得我们 搭建网络的过程变得异常简单. 本文主要关注 Module 类的内部是怎么样 ...

  7. 吴恩达深度学习笔记(114)-RNN梯度消失问题详解

    https://www.toutiao.com/a6652968074712449550/ 2019-02-10 14:34:53 循环神经网络的梯度消失(Vanishing gradients wi ...

  8. 摘自ubantuer-Linux防火墙iptables学习笔记(三)iptables命令详解和举例

    网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能有所帮助. 网管员的安全意识要比空喊Linux安全重要得多. iptables -F iptables -X iptables ...

  9. [转]iOS5 ARC学习笔记:strong、weak等详解

    iOS5中加入了新知识,就是ARC,其实我并不是很喜欢它,因为习惯了自己管理内存.但是学习还是很有必要的. 在iOS开发过程中,属性的定义往往与retain, assign, copy有关,我想大家都 ...

最新文章

  1. 一行CSS样式去除百度地图版权,去除百度地图右上角平移缩放控件的市县区文字
  2. python 爬虫气象气象定时报 气象预警推送
  3. 13.3Runtime 类中的主要方法
  4. 3a算法 isp_Isp图像算法工程师
  5. 老司机的应用级监控——spring?actuator
  6. clickhouse原理解析与开发实战 pdf_Spring全家桶集合:SpringBoot+SpringCloud实战,Spring源码原理...
  7. 20w7珠led驱动电源电路图_LED驱动电源:用TL431做的几个恒流电路分享!
  8. MySQL中主键的选择与磁盘性能
  9. 2017-08-14 前端日报
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的二手电动车交易系统
  11. linux mysql查看数据库编码_MySQL查看和修改字符编码的实现方法
  12. php c 交互,C语言和go语言之间的交互操作方法
  13. java并发编程(9)-- 线程池 创建 参数
  14. MATLAB在声学理论基础中的应用,MATLAB在声学理论基础中的应用
  15. 【软件测试】软件测试过程模型
  16. 2021年,阿里月薪50k招数据分析师,这个要求过分吗?
  17. Apache ShenYu源码阅读系列-基于Http长轮询的数据同步
  18. [附源码]计算机毕业设计基于Springboot校园运动会管理系统
  19. 概率论—随机事件与随机事件的概率
  20. 惠普win10一键还原_惠普win10一键还原怎么用 - 卡饭网

热门文章

  1. 汇总pandas中的dataframe的索引操作
  2. 美国自动驾驶监管里程碑:新法规允许自动驾驶汽车取消方向盘
  3. 从“元宇宙”热炒中理性看待我国虚拟现实产业发展
  4. 2021年AI将改变制造业的6大应用趋势
  5. 玩电子游戏的神经网络,告诉我们大脑是如何决策的
  6. 科技部:学术不端零容忍!违规人员所获职称、奖金等全部清退归零
  7. 结构化数据不应该被人工智能忘之脑后 !
  8. 人工智能影响未来娱乐的31种方式
  9. 深度!移动机器人(AGV)产业链全分析
  10. 前沿地带:从量子计算到量子互联网