分享

ExtJS3 - 如何实现多表头Grid

 dengshisong 2017-02-14

ExtJS 3.x 版本并没有直接实现多表头Grid 的方式,可借助ColumnHeaderGroup插件进行实现,该插件代码已包含在项目源码包中的ux目录下。


1、引入ColumnHeaderGroup插件的css及js文件

  1. <head>  
  2.     <meta charset="utf-8" />  
  3.     <title>ColumnHeaderGroup Grid</title>  
  4.     <link rel="stylesheet" type="text/css" href="extjs/css/ext-all.css" />  
  5.     <link rel="stylesheet" type="text/css" href="extjs/css/xtheme-blue.css" />  
  6.     <link rel="stylesheet" type="text/css" href="extjs/ux/ColumnHeaderGroup.css" />  
  7.     <script type="text/javascript" src="extjs/ext-base.js"></script>  
  8.     <script type="text/javascript" src="extjs/ext-all.js"></script>  
  9.     <script type="text/javascript" src="extjs/ux/ColumnHeaderGroup.js"></script>  
  10. </head>  
2、创建ColumnHeaderGroup对象实例
  1. var row = new Ext.ux.grid.ColumnHeaderGroup({  
  2.     rows: [  
  3.         [{  
  4.             header: "",  
  5.             align: "center",  
  6.             colspan: 1  
  7.         }, {  
  8.             header: "A",  
  9.             align: "center",  
  10.             colspan: 1  
  11.         }, {  
  12.             header: "B",  
  13.             align: "center",  
  14.             colspan: 2  
  15.         }, {  
  16.             header: "C",  
  17.             align: "center",  
  18.             colspan: 3  
  19.         }, {  
  20.             header: "D",  
  21.             align: "center",  
  22.             colspan: 2  
  23.         }, {  
  24.             header: "E",  
  25.             align: "center",  
  26.             colspan: 1  
  27.         }]  
  28.     ]  
  29. });  
其中,rows属性是一个二维数组,每一个子项代表一行,可以指定每行包含的单元格及其所跨的列数,也可以根据自己的实际需要创建多行。


3、创建Grid实例,并使用ColumnHeaderGroup插件

  1. var sm = new Ext.grid.CheckboxSelectionModel();  
  2. var viewport = new Ext.Viewport({  
  3.     layout: "fit",  
  4.     items: [{  
  5.         xtype: "grid",  
  6.         cls: "col-grid",  
  7.         title: "多表头Grid",  
  8.         store: new Ext.data.ArrayStore({  
  9.             fields: ["a""b1""b2""c1""c2""c3""d1""d2""e"],  
  10.             data: [  
  11.                 ["a""b-1""b-2""c-1""c-2""c-3""d-1""d-2""e"],  
  12.                 ["a""b-1""b-2""c-1""c-2""c-3""d-1""d-2""e"],  
  13.                 ["a""b-1""b-2""c-1""c-2""c-3""d-1""d-2""e"]  
  14.             ]  
  15.         }),  
  16.         sm: sm,  
  17.         columns: [sm, {  
  18.             header: " ",  
  19.             dataIndex: "a",  
  20.             align: "center"  
  21.         }, {  
  22.             header: "B1",  
  23.             dataIndex: "b1",  
  24.             align: "center"  
  25.         }, {  
  26.             header: "B2",  
  27.             dataIndex: "b2",  
  28.             align: "center"  
  29.         }, {  
  30.             header: "C1",  
  31.             dataIndex: "c1",  
  32.             align: "center"  
  33.         }, {  
  34.             header: "C2",  
  35.             dataIndex: "c2",  
  36.             align: "center"  
  37.         }, {  
  38.             header: "C3",  
  39.             dataIndex: "c3",  
  40.             align: "center"  
  41.         }, {  
  42.             header: "D1",  
  43.             dataIndex: "d1",  
  44.             align: "center"  
  45.         }, {  
  46.             header: "D2",  
  47.             dataIndex: "d2",  
  48.             align: "center"  
  49.         }, {  
  50.             header: " ",  
  51.             dataIndex: "e",  
  52.             align: "center"  
  53.         }],  
  54.         viewConfig: {  
  55.             forceFit: true  
  56.         },  
  57.         plugins: row  
  58.     }]  
  59. });  
4、如果Gird是CheckboxSelectionModel模式,那在每一行的表头都会有一个checkbox选择框,而且多表头之间参差不齐。此时可以添加额外的css样式,对跨列的表头进行美化。
  1. td.ux-grid-hd-group-cell .x-grid3-hd-checker {display:none;}  
  2.   
  3. .col-grid td {  
  4.     -webkit-box-sizing:border-box;  
  5.     -moz-box-sizing:border-box;  
  6.     box-sizing:border-box;  
  7. }  
ol-grid为当前Grid设置的cls值

5、最终效果如下:


*注:以上实例使用ExtJS3.4版本实现。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约