ExtJs GridPanel表格文本垂直居中设置示例

作者:技术拾光时间:2026-06-10 08:17:07浏览:620

ExtJSGridPanel表格文本垂直居中通过监听数据加载事件实现:在事件回调中遍历所有td元素,统一设置CSS样式text-align:center、line-height:130px和vertical-align:center。由于GridPanel数据加载后DOM会刷新,监听事件可在每次加载后重新应用样式,确保垂直居中效果持续。line-height

GridPanel配置代码

GridPanel配置代码

复制代码 代码如下:
{ xtype : 'grid', id : 'grid_jglb', frame : true, region : 'center', title : '列表详细信息', columnLines : true, loadMask : true, store : 'test_store', viewConfig : { forceFit : true, scrollOffset : 0 }, anchor : '100%', selModel : new Ext.grid.CheckboxSelectionModel({ moveEditorOnEnter : false, width : 28 }), columns : [{ xtype : 'gridcolumn', id : 'gridcolumn_id', align : 'center', dataIndex : 'COLUMN1', editable : false, header : '列名1', sortable : true, width : 100 }, { xtype : 'gridcolumn', align : 'center', dataIndex : 'COLUMN2', editable : false, header : '列名2', sortable : true, width : 100 }, { xtype : 'gridcolumn', align : 'center', dataIndex : 'COLUMN3', editable : false, header : '列名3', sortable : true, width : 100 }, { xtype : 'gridcolumn', align : 'center', dataIndex : 'COLUMN4', id : 'colidx1', editable : false, header : '列名4', sortable : true, width : 100 }, { xtype : 'gridcolumn', align : 'center', dataIndex : 'COLUMN5', hidden : true, sortable : true }], bbar : { xtype : 'paging', autoShow : true, displayInfo : true, pageSize : 10, store : 'test_store' }, tbar : [{ text : '新增', iconCls : 'icon-add', id : 'btn_mxxz' }, '-', { text : '修改', iconCls : 'icon-edit', id : 'btn_mxxg' }, '-', { text : '删除', iconCls : 'icon-delete', id : 'btn_mxsc' }] }

JsonStore的细节这里不再赘述,直接进入正题——如何实现垂直居中。

实现思路

实现思路非常直接:通过操作DOM节点,获取表格中所有的TD元素,然后为需要居中的TD统一设置样式。具体样式值为 'text-align:center;line-height:130px;vertical-align:center;'。之所以能这样做,需要了解Ext的渲染机制:GridPanel最终会被渲染成一个包含DIV的页面结构,每一行数据(例如"测试项,0,20"这一行)实际上被包裹在一个DIV内部的table中。只要掌握Ext的生成规则,定位到这个table,然后操作它的td元素即可。

GridPanel配置代码

具体实现代码

复制代码 代码如下:
Ext.getCmp("grid_jglb").getStore().on('load',setTdCls);//设置表格加载数据完毕后,更改表格TD样式为垂直居中 function setTdCls(){ var gridJglb=document.getElementById("grid_jglb"); var tables = gridJglb.getElementsByTagName("table");//找到每个表格 for(var k = 0; k < tables.length; k++){ var tableV=tables[k]; if(tableV.className=="x-grid3-row-table"){ var trs=tables[k].getElementsByTagName("tr");//找到每个tr for(var i = 0;i < trs.length;i++){ var tds=trs[i].getElementsByTagName("td");//找到每个TD for(var j = 1;j

核心逻辑是使用 getStore().on('load') 监听表格数据加载完成事件,然后遍历所有行和所有TD,逐个写入样式。注意循环从 j=1 开始,跳过了第一列(通常为复选框列),这一细节在实际项目中非常实用。