1. 程式人生 > >如何實現多表頭Grid

如何實現多表頭Grid

ExtJS 3.x 版本並沒有直接實現多表頭Grid 的方式,可藉助ColumnHeaderGroup外掛進行實現,該外掛程式碼已包含在專案原始碼包中的ux目錄下。

1、引入ColumnHeaderGroup外掛的css及js檔案

<head>
	<meta charset="utf-8" />
	<title>ColumnHeaderGroup Grid</title>
	<link rel="stylesheet" type="text/css" href="extjs/css/ext-all.css" />
	<link rel="stylesheet" type="text/css" href="extjs/css/xtheme-blue.css" />
	<link rel="stylesheet" type="text/css" href="extjs/ux/ColumnHeaderGroup.css" />
	<script type="text/javascript" src="extjs/ext-base.js"></script>
	<script type="text/javascript" src="extjs/ext-all.js"></script>
	<script type="text/javascript" src="extjs/ux/ColumnHeaderGroup.js"></script>
</head>


2、建立ColumnHeaderGroup物件例項

				var row = new Ext.ux.grid.ColumnHeaderGroup({
					rows: [
						[{
							header: "",
							align: "center",
							colspan: 1
						}, {
							header: "A",
							align: "center",
							colspan: 1
						}, {
							header: "B",
							align: "center",
							colspan: 2
						}, {
							header: "C",
							align: "center",
							colspan: 3
						}, {
							header: "D",
							align: "center",
							colspan: 2
						}, {
							header: "E",
							align: "center",
							colspan: 1
						}]
					]
				});

其中,rows屬性是一個二維陣列,每一個子項代表一行,可以指定每行包含的單元格及其所跨的列數,也可以根據自己的實際需要建立多行。

3、建立Grid例項,並使用ColumnHeaderGroup外掛

				var sm = new Ext.grid.CheckboxSelectionModel();
				var viewport = new Ext.Viewport({
					layout: "fit",
					items: [{
						xtype: "grid",
						cls: "col-grid",
						title: "多表頭Grid",
						store: new Ext.data.ArrayStore({
							fields: ["a", "b1", "b2", "c1", "c2", "c3", "d1", "d2", "e"],
							data: [
								["a", "b-1", "b-2", "c-1", "c-2", "c-3", "d-1", "d-2", "e"],
								["a", "b-1", "b-2", "c-1", "c-2", "c-3", "d-1", "d-2", "e"],
								["a", "b-1", "b-2", "c-1", "c-2", "c-3", "d-1", "d-2", "e"]
							]
						}),
						sm: sm,
						columns: [sm, {
							header: "&nbsp;",
							dataIndex: "a",
							align: "center"
						}, {
							header: "B1",
							dataIndex: "b1",
							align: "center"
						}, {
							header: "B2",
							dataIndex: "b2",
							align: "center"
						}, {
							header: "C1",
							dataIndex: "c1",
							align: "center"
						}, {
							header: "C2",
							dataIndex: "c2",
							align: "center"
						}, {
							header: "C3",
							dataIndex: "c3",
							align: "center"
						}, {
							header: "D1",
							dataIndex: "d1",
							align: "center"
						}, {
							header: "D2",
							dataIndex: "d2",
							align: "center"
						}, {
							header: "&nbsp;",
							dataIndex: "e",
							align: "center"
						}],
						viewConfig: {
							forceFit: true
						},
						plugins: row
					}]
				});


4、如果Gird是CheckboxSelectionModel模式,那在每一行的表頭都會有一個checkbox選擇框,而且多表頭之間參差不齊。此時可以新增額外的css樣式,對跨列的表頭進行美化。

td.ux-grid-hd-group-cell .x-grid3-hd-checker {display:none;}

.col-grid td {
	-webkit-box-sizing:border-box;
	-moz-box-sizing:border-box;
	box-sizing:border-box;
}
col-grid為當前Grid設定的cls值

5、最終效果如下:


*注:以上例項使用ExtJS3.4版本實現。