三、表格

本文详细介绍如何使用ExtJS创建一个包含多种数据类型的表格,并通过示例代码展示了如何自定义单元格样式及日期格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

表格是一种常见的数据表现方式,ExtJS也提供了强大的表格显示工具。现在新建一个mygrid.html文件,并添加基本的HTML代码,如下:

<!DOCTYPE html PUBLIC"-//W3C//DTD HTML 4.01//EN">

<html>

<head>

   <meta http-equiv="Content-Type" content="text/html;charset=UTF-8; user-scalable=no">

   <title>表格</title>

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

    <scripttype="text/javascript" src="bootstrap.js"></script>

    <script type="text/javascript"src="mygrid.js"></script>   

</head>

<body>

<divid="myDataGrid" width="100%" height=500></div>

</body>

</html>

以上红色代码是需要在基本代码里面自己添加的。然后新建一个mugrid.js文件,这个js文件的代码如下:

Ext.require([       //添加需要引用的库

    'Ext.grid.*',

    'Ext.data.*',

    'Ext.util.*',

    'Ext.state.*'

]);

 

Ext.onReady(function(){

    //1  定义表格列数据模型,包括列名称、数据类型

    Ext.define('myGridColumnModel', {

       extend: 'Ext.data.Model',

       fields: [

           {name: 'Id',type:'int',convert: null,    defaultValue: undefined},

           {name: 'Name'},  //姓名为字符串

           {name: 'Gender'},//性别也为字符串

           {name: 'StudentNO',    type: 'int', convert: null,    defaultValue: undefined},//学号为int

           {name: 'Height'type: 'float', convert: null   defaultValue: undefined},//高度为float

          {name: 'Birthday', type: 'date'dateFormat: 'Yn/j h:ia',defaultValue: undefined}//生日为date

       ],

       idProperty: 'Id'//ID属性

    });

 

    // 表格中显示的数据数组,与myGridColumnModel模型定义的列对应

    var myData = [

       [1, '张三',   '男', 2012001, 170, '1985 9/1 12:00am'],

       [2, '王五',   '男', 2012002, 168, '1983 5/21 12:00am'],

       [3, '王芳',   '女', 2012003, 160, '1985 10/10 12:00am'],

       [4, '李四',   '男', 2012004, 172, '1984 7/13 12:00am'],

       [5, '赵静',   '女', 2012005, 155, '1985 5/1 12:00am'],

       [6, '孙六',   '男', 2012006, 165, '1985 3/21 12:00am'],

       [7, '钱七',   '男', 2012007, 170, '1984 12/12 12:00am']

    ];

 

    //2 创建表格存储数据

    var store = Ext.create('Ext.data.ArrayStore', {

       model: 'myGridColumnModel',   //表格模型

       data: myData                  //数据

    });

   

    /**

     *自定义显示该数据,在此用于表示如果性别是女性就显示红色

     *@param{Object}val

     */

    function showFemale(val) {

       if (val == "女") {

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

       } elseif (val == "男"){

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

       }

       return val;

    }

 

    //3 创建表格

    var grid = Ext.create('Ext.grid.Panel', {

       store: store,

       stateful: true,

       collapsible: true,

       multiSelect: true,

       stateId: 'stateGrid',

       columns: [

           {

                text     : '编号', //表格列头显示的文字               

                width    : 40,

                sortable : true,   //是否可以排序

                dataIndex: 'Id'  //来源于store中的哪一列,注意大小写

           },

           {

                text     : '姓名',

                width    : 60,

                sortable : true,

                dataIndex: 'Name'

           },

           {

                text     : '学号',

                width    : 60,

                sortable : true,               

                dataIndex: 'StudentNO'

           },

           {

                text     : '性别',

                width    : 40,

               sortable : true,

                renderer : showFemale,

                dataIndex: 'Gender'

           },

           {

                text     : '身高',

                width    : 40,

                sortable : true,

                dataIndex: 'Height'

           },

           {

                text     : '出生时间',

                flex     : 1, //弹性显示,如果宽度比较大时,该列宽度就为多余宽度

                sortable : true,

                renderer : Ext.util.Format.dateRenderer('m/d/Y'), //以月/日/年的形式显示时间

                dataIndex: 'Birthday'

           }

       ],

       height: 300,

       width: 400,

       title: '表格',

       renderTo: 'myDataGrid', //绘制到html中定义的div中

       viewConfig: {

           stripeRows: true,

           enableTextSelection: true

       }

    });

});

这段代码比较长,总的来说分为三个部分:一、定义表格列数据模型myGridColumnModel,以前也叫ColumnModel,它主要是继承自Ext.data.Model,用于表示表格列的结构,包括列的名称、数据类型、格式等,在定义列数据模型之后再添加数据,本例中是myData变量,这个数组里面的结构应与myGridColumnModel中定义的列结构以及数据类型一致;二、创建表格存储数据store,意思就是根据前面定义的列数据模型myGridColumnModel以及定义的表格源数据myDate来创建一个用于表格grid显示的数据,类似于数据转换;三、创建表格grid(来源于Ext.grid.Panel),并设置其store为前面创建的表格存储数据,同时,在columns中定义显示的列数组,如:

{

                text     : '编号', //表格列头显示的文字               

                width    : 40,

                sortable : true,   //是否可以排序

                dataIndex: 'Id'  //来源于store中的哪一列,注意大小写

}

text表示列标题,width表示列宽度,sortable表示是否可以排序(升序和降序),dataIndex这个属性表示该列来源于myGridColumnModel的哪一列,它的值应与myGridColumnModel中定义的字段名称一致,如myGridColumnModel中添加了name为Id的字段(field),那么在此也必须为Id,特别要注意大小写,否则可能无法正常显示该列数据。除了介绍的这些常用属性外,还有renderer属性用于表示该列的显示方式,例如显示时间就设置其为Ext.util.Format.dateRenderer('m/d/Y')。如果需要特殊处理,则可以通过定义函数来区别显示,举例说明,如果性别这一列要求男性显示为绿色,女性显示为红色,则可以自定义一个函数showFemale,如下:

    /**

     *自定义显示该数据,在此用于表示如果性别是女性就显示红色

     *@param{Object}val

     */

    function showFemale(val) {

       if (val == "女") {

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

       } else {

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

       }

       return val;

    }

如果这个值为“女”,就返回颜色为red,如果为“男”就返回颜色为blue。

flex属性用于指示该列是否为有弹性的列,主要是当表格宽度比较宽时,该列宽度就为表格多余的宽度,不至于出现还有多余空列。

保存mygrid.html和mygrid.js文件之后,浏览mygrid.html网页,其结果如下图所示:

注意到前面的代码中有两处出现了关于时间格式的设置,第一处为myGridColumnModel定义Birthday时,其dateFormat为'Y n/j h:ia',那么对应在定义数据myData的时候其时间输入格式也应该遵循该格式要求,如1985 9/1 12:00am。在此,Y表示以四位数字显示年份,如果是y则以2位数表示年份,n表示当月的月份(不补0),如果是m则也表示月份(但是要补0,如3月份应表示为03),j表示月份中天数(不补0),如果是d则也表示月份中的天数(但是要补0,即8号应表示为08),a表示用小写的am或pm表示上午还是下午,h表示用12小时制表示小时(不足位补0,如8点表示为08),i表示分钟数(不足位补0,如8分钟表示为08)。同样,在另外一处即表示中显示出生时间的格式Ext.util.Format.dateRenderer('m/d/Y'),它是以“月/日/年”的形式来显示。关于时间格式中各字符的含义如下表所示:

符号

含义

举例

d

月份中的天数,两位数字,不足位补“0

10

D

当前星期的缩写,三个字母

Wed

j

月份中的天数,不补“0

10

l

当前星期的完整拼写

Wednesday

S

英语中月份天数的序数词的后缀,2个字符(与格式符“j”连用)

th

w

一周之中的天数(0~6)(周日为0,

3

z

一年之中的天数(0~365)

9

W

一年之中的周数,两位数字(00~53)

1

F

当前月份的拼写

January

m

当前的月份,两位数字,不足位补“0

1

M

当前月份的完整拼写,三个字母

Jan

n

当前的月份,不补“0

1

t

当前月份的总天数

31

L

是否闰年(“1”为闰年,“0”为平年)

0

Y

4位数字表示的当前年数

2007

y

2位数字表示的当前年数

7

a

小写的“am”和“pm”

pm

A

大写的“AM”和“PM”

PM

g

12小时制表示的当前小时数,不补“0

3

G

24小时制表示的当前小时数,不补“0

15

h

12小时制表示的当前小时数,不足位补“0

3

H

24小时制表示的当前小时数,不足位补“0

15

i

不足位补“0”的分钟数

5

s

不足位补“0”的秒数

1

u

秒数的小数形式

0.1

O

用小时数表示与GTM的差异数

-600

T

当前系统设定的时区

CST

Z

用秒数表示的时区偏移量(西方为负数,东方为正数)

-21600

d

月份中的天数,两位数字,不足位补“0

10

D

当前星期的缩写,三个字母

Wed

j

月份中的天数,不补“0

10

l

当前星期的完整拼写

Wednesday

S

英语中月份天数的序数词的后缀,2个字符(与格式符“j”连用)

th

w

一周之中的天数(0~6)(周日为0,

3

z

一年之中的天数(0~365)

9

W

一年之中的周数,两位数字(00~53)

1

F

当前月份的拼写

January

m

当前的月份,两位数字,不足位补“0

1

M

当前月份的完整拼写,三个字母

Jan

n

当前的月份,不补“0

1

t

当前月份的总天数

31

L

是否闰年(“1”为闰年,“0”为平年)

0

Y

4位数字表示的当前年数

2007

y

2位数字表示的当前年数

7

a

小写的“am”和“pm”

pm

A

大写的“AM”和“PM”

PM

g

12小时制表示的当前小时数,不补“0

3

G

24小时制表示的当前小时数,不补“0

15

h

12小时制表示的当前小时数,不足位补“0

3

H

24小时制表示的当前小时数,不足位补“0

15

i

不足位补“0”的分钟数

5

s

不足位补“0”的秒数

1

u

秒数的小数形式

0.1

O

用小时数表示与GTM的差异数

-600

T

当前系统设定的时区

CST

Z

用秒数表示的时区偏移量(西方为负数,东方为正数)

-21600

格式中间的连接符号可以自己任意组合选择,如使用斜杠/或者短线-,甚至汉字,如格式“Y年n月j日 G:i:s”,其显示结果类似“2011年3月1日 8:00:30”。

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值