Ext.Net学习笔记23:Ext.Net TabPanel用法详解

上面的图片中给出了TabPanel的一个效果图,我们来看一下代码:

<ext:TabPanel runat="server" ID="tabpanel1">
<Items>
<ext:Panel runat="server" ID="tab1" Title="Tab1" Html="第一个Tab">
</ext:Panel>
<ext:TreePanel runat="server" ID="tab2" Title="Tab2" Html="第二个Tab">
<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>
</Items>
</ext:TabPanel>

这段代码中,我们在TabPanel中放了两个子项,一个是Panel,一个是TreePanel,每一个子项作为一个Tab展示在界面中。

我在代码中放了一个Panel和一个TreePanel的目的是想告诉大家,TabPanel中的子项需要继承自Panel,而TreePanel是继承自Panel的,由此可以联想到GridPanel、FormPanel等都可以作为TabPanel的子项来使用。

【题外话:在ExtJS中,出于效率的考虑,应该尽量减少items的嵌套,如果我们需要TabPanel的子项为TreePanel、GridPanel或FormPanel的时候,就没必要再将这些控件嵌套在Panel中】

异步加载Tab内容

异步加载仍然是出于性能的考虑,按需加载,当用户激活一个Tab标签的时候,我们再将这个标签的内容加载出来,从而避免加载未用到的数据。

接下来我们演示一下如何加载Tab2中的TreePanel

第一步,定义TabPanel,为Tab2添加Activate事件,用来处理激活操作:

<ext:TabPanel runat="server" ID="tabpanel1">
<Items>
<ext:Panel runat="server" ID="tab1" Title="Tab1" Html="第一个Tab">
</ext:Panel>
<ext:Panel runat="server" ID="tab2" Title="Tab2" Icon="Application">
<DirectEvents>
<Activate OnEvent="tab2_activate" Single="true">
<EventMask ShowMask="true" Target="This"></EventMask>
</Activate>
</DirectEvents>
</ext:Panel>
</Items>
</ext:TabPanel>

第二步,服务器端添加tab2_activate方法,用代码动态生成树,并添加到tab2中:

protected void tab2_activate(object sender, DirectEventArgs e)
{
TreePanel tree = createTree();
tree.AddTo(tab2);
} private TreePanel 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 }); return tree;
}

第三步,哈哈,没有第三步了,编译程序,刷新页面看看效果吧

当点击Tab2的标签后,首先看到的是加载提示,如下图:

加载完成以后才显示出来树节点。

将Tab标签绘制在底部

效果:

代码:

<ext:TabPanel runat="server" ID="tabpanel1" TabPosition="Bottom">
<Items>
...
</Items>
</ext:TabPanel>

通过TabPosition控制Tab的位置,默认为Top(顶部),另外还可以是Bottom(底部)、Left(左侧)和Right(右侧)。

在TabBar上添加自定义按钮

代码:

<TabBar>
<ext:ToolbarFill></ext:ToolbarFill>
<ext:Button runat="server" Icon="Add"></ext:Button>
<ext:Button runat="server" Icon="DatabaseSave"></ext:Button>
</TabBar>

TabScrollerMenu 插件

代码:

<Plugins>
<ext:TabScrollerMenu></ext:TabScrollerMenu>
</Plugins>

另外,还可以设置PageSize属性,用来控制每页显示的内容条数

Ext.Net学习笔记23:Ext.Net TabPanel用法详解的更多相关文章

  1. Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]

     Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...

  2. (转)live555学习笔记10-h264 RTP传输详解(2)

    参考: 1,live555学习笔记10-h264 RTP传输详解(2) http://blog.csdn.net/niu_gao/article/details/6936108 2,H264 sps ...

  3. 学习笔记--Grunt、安装、图文详解

    学习笔记--Git安装.图文详解 安装Git成功后,现在安装Gruntjs,官网:http://gruntjs.com/ 一.安装node 参考node.js 安装.图文详解 (最新的node会自动安 ...

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

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

  5. Java8学习笔记(五)--Stream API详解[转]

    为什么需要 Stream Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念.它也不同于 StAX 对 ...

  6. JQuery学习笔记系列(一)----选择器详解

    笔者好长时间没有更新过博客园的笔记了,一部分原因是去年刚刚开始工作一段时间忙碌的加班,体会了一种每天加班到凌晨的充实感,之后闲暇时间了也因为自己懒惰没有坚持记笔记的习惯,现在重新拾起来. 借用古人的一 ...

  7. 【Java学习笔记之三十四】超详解Java多线程基础

    前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要,下面跟我一起开启本次的学习之旅吧. 正文 线程与进程 1 线程:进程中负责程序执行的 ...

  8. 【精选】Nginx模块Lua-Nginx-Module学习笔记(二)Lua指令详解(Directives)

    源码地址:https://github.com/Tinywan/Lua-Nginx-Redis Nginx与Lua编写脚本的基本构建块是指令. 指令用于指定何时运行用户Lua代码以及如何使用结果. 下 ...

  9. Redis 学习笔记2:redis.conf配置文件详解

    Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf. 参数说明: 参数说明 redis.conf 配置项说明如下: 1. Redis默认不是以守护进程的方式运行,可以通 ...

随机推荐

  1. soliworks三维机柜布局(四)进入solidworks中三维布线

    首先需要在solidworks electrical中创建solidworks装配体文件. 菜单栏:处理--solidworks机柜布局--勾选要创建的装配体--点击确定 在文件列表下右键装配体文件- ...

  2. 转载 深入理解JavaScript中的this关键字

    转载原地址: http://www.cnblogs.com/rainman/archive/2009/05/03/1448392.html 深入理解JavaScript中的this关键字   1. 一 ...

  3. C++中实现从std::string类型到bool型的转换

    利用输入字符串流:std::istringstream bool b; std::string s = "true"; std::istringstream(s) >> ...

  4. android 数据存储操作之SQLite

    一. SQLite介绍 SQLite是android内置的一个很小的关系型数据库. 二. SQLiteOpenHelper的使用方法 ①SQLiteOpenHelper是一个辅助类来管理数据库的创建和 ...

  5. Android v4 包和v7包问题

    昨天新建了一个android项目,加入了一个bootstrap的外部依赖和一个底部导航栏的外部依赖.结果jj 了,老是提醒我v4包v7包冲突: 事实是这样的,首先我的底部导航依赖库里面有一个v4包,那 ...

  6. Genymotion - 强大好用高性能的 Android 模拟器 (在电脑流畅运行APK安卓软件游戏的利器)

    随着 Android 系统的应用和游戏越来越丰富,甚至有些比起Windows.Mac上的软件更加好用好玩,因此很多人都希望能在电脑上也能玩到安卓的游戏或APP. 我们曾推荐过 BlueStacks,而 ...

  7. 查看SQL语句执行时间、IO开销

    SET STATISTICS TIME ON SET STATISTICS IO ON或者set statistics io,time on

  8. 【30】透彻了解inlining 的里里外外

    1.inline方法相当于文本替换,不需要承担方法调用的额外开销,同时还有潜在的优势,文本替换后,编译器会进行代码优化.而对于方法调用,编译器没有能力进行代码优化. 2.显而易见,inline方法往往 ...

  9. delphi 连接mysql

    Delphi连接MySQL真麻烦,研究了一天,从网上找了无数文章,下载了无数插件都没解决.最后返璞归真,老老实实用ADO来连接,发现也不是很顺利,但最终还是连接成功了.多少有点心得:ADO各个组件的作 ...

  10. Android蓝牙操作笔记

    蓝牙是一种支持设备短距离传输数据的无线技术.android在2.0以后提供了这方面的支持. 从查找蓝牙设备到能够相互通信要经过几个基本步骤(本机做为服务器): 1.设置权限 在manifest中配置 ...