《Ext详解与实践》节选:自定义单元格的显示格式

有时候,需要在Grid中显示一个链接,或根据数字的大小显示不同的颜色,又或者使用固定格式显示记录编号等,这就需要自定义单元格的显示格式。在ExtGrid可以很容易的实现自定义单元格的显示格式。在定义GridColumnModel的时候,在需要自定义显示格式的列中加入参数renderer,该参数指向一个函数,在显示时会以函数返回的数据作为显示数据,例如最简单的就是定义日期的显示格式:

{header: "创建时间", width: 85, sortable: true, renderer: Ext.util.Format.dateRenderer('Y-m-d'), dataIndex: 'createtime'}

 

参数renderer指向的是一个函数,在函数中传入该单元格的值,函数执行后返回要显示的数据。

下面通过例子来演示一下常用的自定义格式:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html debug='true'>

<head>

  <title>自定义单元格的显示格式</title>

         <meta http-equiv="content-type" content="text/html; charset=utf-8">

         <link rel="stylesheet" type="text/css" href="../lib/ext/resources/css/ext-all.css" />

        <script type="text/javascript" src="../lib/ext/ext-base.js"></script>

  <script type="text/javascript" src="../lib/ext/ext-all.js"></script>

  <script type="text/javascript" src="../lib/ext/locale/ext-lang-zh_CN.js"></script>

  <style>

        </style>

</head>

<body>

         <h1 style="margin:20px 0px 0px 20px;">4 自定义单元格的显示格式</h1>

         <br />

         <div style="padding-left:20px;">

<p>

    <div id="panel1"></div><br>

    <div >事件:</div>

    <textarea id='op' rows="10" style="width:800px;"></textarea>

</p>

<br />

</div>

<script>

         var app={};

        

         Ext.onReady(function(){

 

    Ext.state.Manager.setProvider(new Ext.state.CookieProvider());

 

    Ext.QuickTips.init();

                   Ext.Msg.minWidth=300;

 

    var myData = [

        [1,{text:'Ext',url:'http://extjs.com'},-10.00,'2008-01-01 12:01:01','br.gif','Atlantic Spadefish.jpg',{text:'',tips:'提示1'}],

        [2,{text:'Google',url:'http://www.google.cn'},1.00,'2008-02-16 12:01:02','fr.gif','Bat Ray.jpg',{text:'',tips:'提示2'}],

        [3,{text:'新浪',url:'http://www.sina.com.cn'},0,'2008-03-15 12:01:03','cu.gif','Blue Angelfish.jpg',{text:'',tips:'提示3'}],

        [4,{text:'雅虎',url:'http://www.yahoo.com.cn'},10.01,'2008-04-14 12:01:04','es.gif','Bluehead Wrasse.jpg',{text:'',tips:'提示4'}],

        [5,{text:'CSDN',url:'http://www.csdn.net'},200.90,'2008-05-13 12:01:05','cn.gif','Cabezon.jpg',{text:'',tips:'提示5'}],

        [6,{text:'微软',url:'http://www.microsoft.com'},-200.01,'2008-06-12 12:01:06','us.gif','California Moray.jpg',{text:'',tips:'提示6'}]

    ];

 

    var store = new Ext.data.SimpleStore({

             fields: [

       {name: 'id',type:'int'},

       {name: 'linker'},

       {name: 'number', type: 'float'},

       {name: 'datetime', type: 'date', dateFormat: 'Y-m-d H:i:s'},

       {name: 'icon'},

       {name: 'qtips'},

       {name: 'tips'}

             ]

    });

    store.loadData(myData);

 

 

                   function leftPad(val){

                            return String.leftPad(val,5,"0");

                   }

                  

                   function linker(val){

                            if(typeof val=='object'){

                                     return '<a style="display:table;width:100%;" title="'+val.url+'" target="_blank" href="'+val.url+'">'+val.text+'</a>'

                            }

                            return val;

                   }

 

    function num(val){

        if(val > 0){

            return '<span style="color:green;">' + val + '</span>';

        }else if(val < 0){

            return '<span style="color:red;">' + val + '</span>';

        }

        return val;

    }

   

    function icon(val){

    return '<img src="./images/gif/'+val+'">'

    }

   

    function qtips(val){

    return '<span style="display:table;width:100%;" qtip=/'<img src="images/'+val+'">/'>'+val+'</span>'

    }

   

    function tips(val){

    if(typeof val=='object'){

               return '<span style="display:table;width:100%;" title="'+val.tips+'">'+val.text+'</span>'

    }

    return val

    }

 

    var grid = new Ext.grid.GridPanel({

      height:350,

      width:800,

      store: store,

      title:'自定义单元格的显示格式',

      frame:true,

      columns: [

             {header:'编号',width:80, sortable: true,renderer:leftPad, dataIndex:'id'},

        {header: "链接", width:75, sortable: true, renderer: linker, dataIndex: 'linker'},

        {header: "数字", width:75, sortable: true,renderer: num, dataIndex: 'number'},

        {header: "时间", width:85, sortable: true, renderer: Ext.util.Format.dateRenderer('Y-m-d'), dataIndex: 'datetime'},

        {header: "图标", width:75, sortable: true,renderer: icon, dataIndex: 'icon'},

        {header: "图片提示", width:75, sortable: true,renderer: qtips, dataIndex: 'qtips'},

        {header: "文字提示", width:75, sortable: true,renderer: tips, dataIndex: 'tips'}

      ],

      stripeRows: true,

      autoExpandColumn: 5,

      listeners:{

             rowclick:function(trid,rowIndex,e){

                      Ext.get('op').dom.value+='------------------------/n'+

                               Ext.encode(store.getAt(rowIndex).data)+'/n';

             }

    }

     

    });

 

    grid.render('panel1');

 

 

                   Ext.get('op').dom.value="";

         })

</script>

</body>

</html>

 

例子的运行结果如下图


 

例子中,第1列演示了以固定长度为5位,不足5位以0补齐的格式的数字:

                   function leftPad(val){

                            return String.leftPad(val,5,"0");

                   }

 

该函数使用Ext字符串leftPad方法补0,然后将转换后的值返回。

2列演示了如何在单元格中显示链接:

                   function linker(val){

                            if(typeof val=='object'){

                                     return '<a style="display:table;width:100%;" title="'+val.url+'" target="_blank" href="'+val.url+'">'+val.text+'</a>'

                            }

                            return val;

                   }

 

2列的数据使用了JSON格式的数据,如“{text:'Ext',url:'http://extjs.com'}”,标签text内的值是单元格显示的数据,而标签url的值是链接地址。在函数中先判断原始值是否为对象,如果是则使用texturl组合一个HTML标记并返回。在HTML标记中定义了两个样式,其目的是让HTML标记显示时能填满单元格,这样当鼠标移动到该单元格空白处时,也能显示提示信息。提示信息由HTML标记的title属性实现。

3列则演示了根据数值的大小使用不同颜色作为显示文字的颜色,该单元格中负数显示为红色,0为黑色,正数为绿色:

    function num(val){

        if(val > 0){

            return '<span style="color:green;">' + val + '</span>';

        }else if(val < 0){

            return '<span style="color:red;">' + val + '</span>';

        }

        return val;

    }

 

函数中控制颜色的显示是通过HTML标记SPAN的样式实现的。

4列很简单,使用了Ext的日期格式函数控制日期的显示格式。在这里要特别注意的是日期的值格式与store字段中定义的格式一定要相同,不然Grid会显示为空白值。例如例子中的日期值为“2008-01-01 12:01:01,则定义日期的格式必须为“Y-m-d H:i:s”。

5列演示了如何在单元格中显示小图片:

    function icon(val){

    return '<img src="./images/gif/'+val+'">'

    }

 

函数将包含图片文件名的原始值转换为HTML标记IMG,就可实现在单元格内显示图片了。

6列演示了通过ExtQuickTip显示图片提示:

    function qtips(val){

    return '<span style="display:table;width:100%;" qtip=/'<img src="images/'+val+'">/'>'+val+'</span>'

    }

 

要在HTML标记中使用QuickTip显示提示,只要在标记中加入一个属性qtip就行了。在函数中可以看到将一个IMG标记作为了qtip的显示内容。不过,别忘了在OnReady函数中对QuickTip进行初始化。标记SPAN也定义了两个样式,其作用与第2列的一样。该列的提示显示结果请看如下图


 

7列使用了HTML标记的title属性来显示提示,与第2列的方法是一样的,只是该列使用了SPAN标记。

本节只是简单的演示了几种自定义显示格式的单元格,只要灵活使用HTML标记,还可以实现更多的自定义格式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js学习总结----案例之多级菜单js版本

具体代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title><style>*{margin:0;padding:0;font-size:14px;}ul,li{list-style:none;}.box{margin:10px;pad…

讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当 new 的时候, 他们的执行顺序

此题考察的是类加载器实例化时进行的操作步骤&#xff08;加载–>连接->初始化&#xff09;。 父类静态变量、 父类静态代码块、 子类静态变量、 子类静态代码块、 父类非静态变量&#xff08;父类实例成员变量&#xff09;、 父类构造函数、 子类非静态变量&…

转载:成功应用ERP的思路和方法分析

企业ERP的应用现状一是应用数量。据我不完全统计&#xff0c;时至今日&#xff0c;全国有一万多家企业在集成应用ERP&#xff0c;这和国家统计局统计提供的266,090个国有及规模以上非国有企业的总数相比&#xff0c;仅占百分之四。二是应用时间。从1981年应用第一套ERP到2007年…

mysql无法找到事件id100描述_解决“事件 ID ( 487 )的描述(在资源( Zend Optimizer )中)无法找到”...

事件类型: 错误事件来源: Zend Optimizer事件种类: 无事件 ID: 487日期: 2006-8-18事件: 0:17:36用户: N/A计算机: COMPUTER描述:事件 ID ( 487 )的描述(在资源( Zend Optimizer )中)无法找到。本地计算机可能没有必要的注册信息或消息 DLL 文件来从远程计算机显示消息。您可能…

正则化线性回归

1. 模型的欠拟合、过拟合无论是回归问题还是分类问题都可能存在模型的欠拟合和过拟合的情况。下图是回归问题中的例子&#xff1a;第一个模型欠拟合&#xff0c;第二个模型刚好拟合&#xff0c;第三个过拟合。下图是分类问题中的例子&#xff1a;第一个模型欠拟合&#xff0c;第…

用过哪些Map类,都有什么区别,HashMap是线程安全的吗,并发下使用的Map是什么,他们内部原理分别是什么,比如存储方式,hashcode,扩容,默认容量等。

JAVA Map的几种类型: HashMap、HashTable、LinkedHashMap和TreeMap。 HashMap HashMap 是一个最常用的Map&#xff0c;它根据键的HashCode值存储数据&#xff0c;根据键可以直接获取它的值&#xff0c;具有很快的访问速度。 遍历时&#xff0c;取得数据的顺序是完全随机的。 …

python 线性回归回归 缺失值 忽略_python – 使用scikit-learn(sklearn),如何处理线性回归的缺失数据?...

我的数据包含2个DataFrame. DataFrame_1.shape (40,5000)和DataFrame_2.shape (40,74).我正在尝试进行某种类型的线性回归,但DataFrame_2包含NaN缺失的数据值.当我DataFrame_2.dropna(how “any”)时,形状下降到(2,74).sklearn中是否存在可以处理NaN值的线性回归算法&#xff1…

vl_sift函数用法

1 I vl_impattern(roofs1) ; 2 image(I) ;3 %vl_sift函数的输入是一个单精度的灰度图像&#xff0c;灰度值区间归一化到[0, 255]。4 %因此图像 I 需要通过下面的函数转成相应的格式&#xff1a;5 I single(rgb2gray(I)) ;6 %vl_sift( )的输出矩阵 这里f是一个[x,y,s,th]的向量…

Java面试题之有没有有顺序的Map实现类,如果有,他们是怎么实现有序的?

Hashmap和Hashtable 都不是有序的。 TreeMap和LinkedHashmap都是有序的。&#xff08;TreeMap默认是key升序&#xff0c;LinkedHashmap默认是数据插入顺序&#xff09; TreeMap是基于比较器Comparator来实现有序的。 LinkedHashmap是基于链表来实现数据插入有序的。

Photoshop的批处理(有海量的数码照片,想传上网的话就看下)

每次狂按快门的结果就是得到海量的数码照片&#xff0c;想传上网的话&#xff0c;最起码也要做一些尺寸方面的处理&#xff0c;这么多照片&#xff0c;真的要一张一张处理吗&#xff1f;Photoshop自有好用的Action工具帮我们做批处理。 一、前期准备 在图片所在文件夹里添加一个…

Python基础-包

定义&#xff1a;包本质就是一个目录&#xff08;必须带有一个__init__.py文件&#xff09;&#xff0c;它是用来从逻辑上组织模块导入包的本质&#xff1a;执行该包下的__init__.py文件导入当前目录下模块的一种方式&#xff1a;from . import module_name 其中.表示当前目录…

mysql试题错误记录字段_MySQL这三道常见的面试题,你有被问过吗?

据群友面试反馈&#xff0c;整理了3道MySQL面试题&#xff0c;对很多人可能是小菜一碟&#xff0c;对这些熟悉&#xff0c;有更好的理解的话&#xff0c;可以留言补充&#xff0c;不断完善我们的题库。MySQL查询字段区不区分大小写&#xff1f;MySQL innodb的事务与日志的实现方…

面试题,反射创建类实例的三种方式是什么

1、获得Class&#xff1a;主要有三种方法&#xff1a; &#xff08;1&#xff09;Object-->getClass &#xff08;2&#xff09;任何数据类型&#xff08;包括基本的数据类型&#xff09;都有一个“静态”的class属性 &#xff08;3&#xff09;通过class类的静态方法&am…

控制控制台

var s:string; begin AllocConsole; try Write(Type here your words and press Enter); Readln(s); ShowMessage(Format(You typed: "%s",[s])); finally FreeConsole; end; end;

推荐系统中的矩阵分解演变方式

推荐算法主要分为基于内容的算法和协同过滤. 协同过滤的两种基本方法是基于邻居的方法(基于内容/物品的协同过滤)和隐语义模型. 矩阵分解乃是实现隐语义模型的基石.矩阵分解依据用户对物品的评分, 判断出用户和物品的隐语义向量, 然后依据用户和物品的隐语义向量来进行推荐.推荐…

mysql1846错误_MySQL 错误代码:2003 idea错误:ERROR DruidDataSource:1846 - create connection error...

idea项目一启动就报错&#xff1a;20:01:13,047 ERROR DruidDataSource:1846 - create connection errorcom.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failureThe last packet sent successfully to the server was 0 milliseconds ago. The…

mac刷新本地DNS缓存

本地连网有问题&#xff0c;刷新本地dns缓存&#xff0c;刷新DNS缓存命令 sudo killall -HUP mDNSResponder

HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别(转)

HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别 文章来源&#xff1a;http://www.cnblogs.com/beatIteWeNerverGiveUp/p/5709841.html ①HashMap的工作原理 HashMap基于hashing原理&#xff0c;我们通过put()和get()方法储存和获取对象。当我们将键值对传递…

Java中Class.forName和 ClassLoader.loadClass()区别

一、类加载过程 装载&#xff1a;通过累的全限定名获取二进制字节流&#xff0c;将二进制字节流转换成方法区中的运行时数据结构&#xff0c;在内存中生成Java.lang.class对象&#xff1b; 链接&#xff1a;执行下面的校验、准备和解析步骤&#xff0c;其中解析步骤是可以选…

变量在内存中的值[c][code]

#include <stdio.h>main() { /*%d所能输出的范围*/printf("%d \n", 0xffffffff); //%d所能输出的32位整数, 最大负整数printf("%d \n", 0x7fffffff); //%d所能输出的32位整数, 最大正整数/*单双精度浮点变量a,b,c,d在内存中的地址和内容 * …