ag-gird 表格原生行高实在太宽,现在需要将行高缩小一点.以下将对表格的两种情况进行设置:
1.普通表格数据展示(无分组情况)
效果如图所示:
设置步骤:
(1) .rowHeight:设置数据行行高;headerHeight设置表格表头行高,
rowHeight: 28, // 设置表格行高headerHeight: 30, // 设置表格表头的行高
(2).在defaultColDef中设置cellStyle.的line-height.
defaultColDef: {sortable: true,resizable: true,cellStyle: {'line-height': '28px', // 行高设置同步:跟rowHeight属性设置值一致},},
注意: rowHeight的值要与ine-height一致.
如果不设置line-height值的话,表格中的数据会错位显示.如图所示:
以下为整个页面代码:
<!doctype html>
<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><title>ag-grid入门示例</title><!-- 引入ag-grid有两种方式 --><!-- 方式一:添加ag-grid-enterprise.min.js 文件到项目中 --><script type="text/javascript" src="../js/ag-grid-enterprise.min.js"></script><!-- 方式二 --><!-- <script src="http://www.itxst.com/package/ag-grid/ag-grid-community.js"></script> --><!-- <link href="http://www.itxst.com/package/ag-grid/styles/ag-grid.css" rel="stylesheet"/> --></head><body><div id="myGrid" style="width: 100%;height: 1000px;" class="ag-theme-alpine"></div><script>//定义表格列var columnDefs = [{headerName: '班级',field: 'class',},{headerName: '姓名',field: 'name'},{headerName: '性别',field: 'sex'},{headerName: '年龄',field: 'age'},{headerName: '省份',field: 'sf'},];var data = [{ class: '一班', name: '张三', sex: '男', age: '100', 'sf': '浙江' },{ class: '一班', name: '李四', sex: '女', age: '5', 'sf': '四川' },{ class: '一班', name: '王五', sex: '女', age: '20', 'sf': '河南' },{ class: '一班', name: '小李', sex: '女', age: '26', 'sf': '江苏' },{ class: '二班', name: '小丽', sex: '男', age: '35', 'sf': '湖南' },{ class: '二班', name: '张云', sex: '男', age: '100', 'sf': '吉林' },{ class: '二班', name: '吴强', sex: '女', age: '5', 'sf': '浙江' },{ class: '二班', name: '陈丽', sex: '女', age: '20', 'sf': '内蒙古' },{ class: '二班', name: '谭笑', sex: '女', age: '26', 'sf': '江苏' },{ class: '二班', name: '欧阳', sex: '男', age: '35', 'sf': '福建' },{ class: '二班', name: '李冠', sex: '男', age: '100', 'sf': '宁夏' },{ class: '二班', name: '张物', sex: '女', age: '5', 'sf': '新疆' },{ class: '三班', name: '郭翰', sex: '女', age: '20', 'sf': '西藏' },{ class: '三班', name: '何树', sex: '女', age: '26', 'sf': '广西' },{ class: '三班', name: '田武', sex: '男', age: '35', 'sf': '海南' },{ class: '三班', name: '孔紫', sex: '男', age: '35', 'sf': '山东' }];//将列和数据赋给gridOptions var gridOptions = {columnDefs: columnDefs,rowData: data,defaultColDef: {sortable: true,resizable: true,cellStyle: {'line-height': '28px', // 行高设置同步:跟rowHeight属性设置值一致},},rowHeight: 28, // 设置表格行高headerHeight: 30, // 设置表格表头的行高};//在dom加载完成后 初始化agGrid完成document.addEventListener("DOMContentLoaded", function () {var eGridDiv = document.querySelector('#myGrid');new agGrid.Grid(eGridDiv, gridOptions);});</script>
</body></html>
2.列有分组情况:
方法一:
首先,看效果(分组列左边没有计数数据)
如果有分组列,完全依据以上的无分组情况来写的话,表格数据是有些错位的.
错位效果如下:
所以单靠第一种方法是有问题的,所以自己进行了一下其他设置,暂时能解决这个问题,但是也有一个弊端,弊端在最后会描述.
(1) 首先,rowHeight,line-height这三个属性还是需要设置的,现在展示的就是以上分组数据错位的情况.
(2)重新设置分组列左边的图标( < ,^)样式和位置.
使用icons属性中的groupExpanded和groupContracted,分别是列展开和折叠的动作.并且在groupExpanded和groupContracted中的img标签中对图片的位置进行设置,以此来调整分组中图标的位置.
icons: {groupExpanded: '<img src="../image/tree-open.png"style="width: 20px;height:20px;margin-bottom: 10px"/>', // 展开后的图片groupContracted: '<img src="../image/tree-closed.png"style="width: 20px;height:20px;margin-bottom: 10px"/>',// 折叠后的图片}
上面代码中的src就是需要放置的图片,在ag-grid中,展开和折叠这两个图片是有地方可以下载的.名字分别是tree-open和tree-closed.
icon下载页面https://www.ag-grid.com/react-data-grid/custom-icons/#provided-theme-iconshttps://www.ag-grid.com/react-data-grid/custom-icons/#provided-theme-icons
下载下来的图片都是svg格式,需要转化为png格式或者其他格式的图片才能识别并且展示出来.
现在继续看效果,可以看待分组列旁边的计数还是展示错位::
(3) 本人现在暂时未找到方法将计数的格式调整规范,因为只能先隐藏,所以需要启用autoGroupColumnDef属性,就是对分组列进行一些属性设置的方法.并且在里面的cellRendererParams中继续设置suppressCount=true,以此来不显示分组列右边的个数统计..
autoGroupColumnDef: {headerName: '班级(分组后的名称)', // 设置分组之后列的显示名称,如果不设置,则默认显示为“Group”。minWidth: 100, // 设置分组列的最小宽度,其他属性也可以设置,例如:width;maxWidthsort: 'asc', // 对分组进行排序,asc是升序,desc是降序pinned: 'left', // 将分组列固定在左边cellRendererParams: {suppressCount: true, // 不显示分组列右边的计数个数}},
最后,再看一次效果图:
备注:
这一部分还用到分组后对分组列的名字显示:即在autoGroupColumnDef属性中设置headerName.
以下为效果源码:
<!doctype html>
<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><title>ag-grid入门示例</title><!-- 引入ag-grid有两种方式 --><!-- 方式一:添加ag-grid-enterprise.min.js 文件到项目中 --><script type="text/javascript" src="../js/ag-grid-enterprise.min.js"></script><!-- 方式二 --><!-- <script src="http://www.itxst.com/package/ag-grid/ag-grid-community.js"></script> --><!-- <link href="http://www.itxst.com/package/ag-grid/styles/ag-grid.css" rel="stylesheet"/> --></head><body><div id="myGrid" style="width: 100%;height: 1000px;" class="ag-theme-alpine"></div><script>//定义表格列var columnDefs = [{headerName: '班级',field: 'class',rowGroup: true, // 进行分组显示hide: true // 隐藏本列(会重新显示一列分组后的数据)},{headerName: '姓名',field: 'name'},{headerName: '性别',field: 'sex'},{headerName: '年龄',field: 'age'},{headerName: '省份',field: 'sf'},];var data = [{ class: '一班', name: '张三', sex: '男', age: '100', 'sf': '浙江' },{ class: '一班', name: '李四', sex: '女', age: '5', 'sf': '四川' },{ class: '一班', name: '王五', sex: '女', age: '20', 'sf': '河南' },{ class: '一班', name: '小李', sex: '女', age: '26', 'sf': '江苏' },{ class: '二班', name: '小丽', sex: '男', age: '35', 'sf': '湖南' },{ class: '二班', name: '张云', sex: '男', age: '100', 'sf': '吉林' },{ class: '二班', name: '吴强', sex: '女', age: '5', 'sf': '浙江' },{ class: '二班', name: '陈丽', sex: '女', age: '20', 'sf': '内蒙古' },{ class: '二班', name: '谭笑', sex: '女', age: '26', 'sf': '江苏' },{ class: '二班', name: '欧阳', sex: '男', age: '35', 'sf': '福建' },{ class: '二班', name: '李冠', sex: '男', age: '100', 'sf': '宁夏' },{ class: '二班', name: '张物', sex: '女', age: '5', 'sf': '新疆' },{ class: '三班', name: '郭翰', sex: '女', age: '20', 'sf': '西藏' },{ class: '三班', name: '何树', sex: '女', age: '26', 'sf': '广西' },{ class: '三班', name: '田武', sex: '男', age: '35', 'sf': '海南' },{ class: '三班', name: '孔紫', sex: '男', age: '35', 'sf': '山东' }];//将列和数据赋给gridOptions var gridOptions = {columnDefs: columnDefs,rowData: data,defaultColDef: {sortable: true,resizable: true,cellStyle: {'line-height': '28px', // 行高设置同步:跟rowHeight属性设置值一致},},// 是否展开分组groupDefaultExpanded: 1,// 默认情况下打开组的级别:-1:展开所有组;0:不展开组;1:只展开第一层组别;2:之展开前两层组别,(我的理解是,数字是几就展开前几层组别,暂时没有进行多个组别的测试)// 对组别的设置autoGroupColumnDef: {headerName: '班级(分组后的名称)', // 设置分组之后列的显示名称,如果不设置,则默认显示为“Group”。minWidth: 100, // 设置分组列的最小宽度,其他属性也可以设置,例如:width;maxWidthsort: 'asc', // 对分组进行排序,asc是升序,desc是降序pinned: 'left', // 将分组列固定在左边cellRendererParams: {suppressCount: true, // 不显示分组列右边的计数个数}},rowHeight: 28, // 设置表格行高headerHeight: 30, // 设置表格表头的行高// 设置分组列左边的图标icons: {groupExpanded: '<img src="../image/tree-open.png"style="width: 20px;height:20px;margin-bottom: 10px"/>', // 展开后的图片groupContracted: '<img src="../image/tree-closed.png"style="width: 20px;height:20px;margin-bottom: 10px"/>',// 折叠后的图片}};//在dom加载完成后 初始化agGrid完成document.addEventListener("DOMContentLoaded", function () {var eGridDiv = document.querySelector('#myGrid');new agGrid.Grid(eGridDiv, gridOptions);});</script>
</body></html>
方法二:
即在上述方法基础上不设置 icons,suppressCount, 并且将line-height替换为 'margin-top',将 'margin-top'值设置为负数(具体数值需要根据表格调试).但是这样的方法会导致鼠标点击时也有错位的情况.效果如下:
以下是上面效果的所有代码:
<!doctype html>
<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><title>ag-grid入门示例</title><!-- 引入ag-grid有两种方式 --><!-- 方式一:添加ag-grid-enterprise.min.js 文件到项目中 --><script type="text/javascript" src="../js/ag-grid-enterprise.min.js"></script><!-- 方式二 --><!-- <script src="http://www.itxst.com/package/ag-grid/ag-grid-community.js"></script> --><!-- <link href="http://www.itxst.com/package/ag-grid/styles/ag-grid.css" rel="stylesheet"/> --></head><body><div id="myGrid" style="width: 100%;height: 1000px;" class="ag-theme-alpine"></div><script>//定义表格列var columnDefs = [{headerName: '班级',field: 'class',rowGroup: true, // 进行分组显示hide: true // 隐藏本列(会重新显示一列分组后的数据)},{headerName: '姓名',field: 'name'},{headerName: '性别',field: 'sex'},{headerName: '年龄',field: 'age'},{headerName: '省份',field: 'sf'},];var data = [{ class: '一班', name: '张三', sex: '男', age: '100', 'sf': '浙江' },{ class: '一班', name: '李四', sex: '女', age: '5', 'sf': '四川' },{ class: '一班', name: '王五', sex: '女', age: '20', 'sf': '河南' },{ class: '一班', name: '小李', sex: '女', age: '26', 'sf': '江苏' },{ class: '二班', name: '小丽', sex: '男', age: '35', 'sf': '湖南' },{ class: '二班', name: '张云', sex: '男', age: '100', 'sf': '吉林' },{ class: '二班', name: '吴强', sex: '女', age: '5', 'sf': '浙江' },{ class: '二班', name: '陈丽', sex: '女', age: '20', 'sf': '内蒙古' },{ class: '二班', name: '谭笑', sex: '女', age: '26', 'sf': '江苏' },{ class: '二班', name: '欧阳', sex: '男', age: '35', 'sf': '福建' },{ class: '二班', name: '李冠', sex: '男', age: '100', 'sf': '宁夏' },{ class: '二班', name: '张物', sex: '女', age: '5', 'sf': '新疆' },{ class: '三班', name: '郭翰', sex: '女', age: '20', 'sf': '西藏' },{ class: '三班', name: '何树', sex: '女', age: '26', 'sf': '广西' },{ class: '三班', name: '田武', sex: '男', age: '35', 'sf': '海南' },{ class: '三班', name: '孔紫', sex: '男', age: '35', 'sf': '山东' }];//将列和数据赋给gridOptions var gridOptions = {columnDefs: columnDefs,rowData: data,defaultColDef: {sortable: true,resizable: true,cellStyle: {'margin-top':"-5px"},},// 是否展开分组groupDefaultExpanded: 1,// 默认情况下打开组的级别:-1:展开所有组;0:不展开组;1:只展开第一层组别;2:之展开前两层组别,(我的理解是,数字是几就展开前几层组别,暂时没有进行多个组别的测试)// 对组别的设置autoGroupColumnDef: {headerName: '班级(分组后的名称)', // 设置分组之后列的显示名称,如果不设置,则默认显示为“Group”。minWidth: 100, // 设置分组列的最小宽度,其他属性也可以设置,例如:width;maxWidthsort: 'asc', // 对分组进行排序,asc是升序,desc是降序pinned: 'left', // 将分组列固定在左边},rowHeight: 30, // 设置表格行高headerHeight: 30, // 设置表格表头的行高};//在dom加载完成后 初始化agGrid完成document.addEventListener("DOMContentLoaded", function () {var eGridDiv = document.querySelector('#myGrid');new agGrid.Grid(eGridDiv, gridOptions);});</script>
</body></html>
方法三:
时隔一天,又找到一种方式。现在不仅可以简单设置行高,就连右边的计数也可以显示出来,并且也不用单独替换图标。
同样先来看效果:
要实现这样的效果,这里需要设置三个地方:
(1) 设置rowHeight属性。
rowHeight: 28, // 设置表格行高headerHeight: 30, // 设置表格表头的行高
(2) 设置cellStyle属性
cellStyle: (params) => {// 判断是不是分组列,如果是的话就不需要设置line-height属性,如果不是的话就需要设置line-height(因为.ag-cell-expandable只对分组列有作用)if (params.column.colId === "ag-Grid-AutoColumn") {return {};}return { "line-height": "28px" };}
(3)引入ag-grid的css style中的 .ag-cell-expandable
<style>/* 对表格分组样式的渲染 */.ag-cell-expandable {font-weight: bold;color: blue;margin-top: -6px; /* 根据表格的实际情况来调整距离 */}</style>
注意的是,ag-grid的版本需要是高版本,这个页面用的是 V26的企业版,我之前使用V23的时候,使用 .ag-cell-expandable无效果。不能实现相应功能。
以下为上图的完整代码:
<!doctype html>
<html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><title>ag-grid入门示例</title><!-- 引入ag-grid有两种方式 --><!-- 方式一:添加ag-grid-enterprise.min.js 文件到项目中 --><!-- <script type="text/javascript" src="../js/ag-grid-enterprise.min.js"></script> --><!-- 以下 ag-grid 新版本链接 ,已经将文件夹中的ag-grid-enterprise.min.js 替换成了新版本,要保存新版本的ag-grid-enterprise.min.js文件,只需在网页上打开这个链接,然后右键另存问,就可以将这个js文件保存下来,放在引用中使用 --><script src="https://unpkg.com/@ag-grid-enterprise/all-modules@26.0.0/dist/ag-grid-enterprise.min.js"></script><style>/* 对表格分组样式的渲染 */.ag-cell-expandable {font-weight: bold;color: blue;margin-top: -6px; /* 根据表格的实际情况来调整距离 */}</style>
</head><body><div id="myGrid" style="width: 100%;height: 1000px;" class="ag-theme-alpine"></div><script>//定义表格列var columnDefs = [{headerName: '班级',field: 'class',rowGroup: true, // 进行分组显示hide: true // 隐藏本列(会重新显示一列分组后的数据)},{headerName: '姓名',field: 'name'},{headerName: '性别',field: 'sex'},{headerName: '年龄',field: 'age'},{headerName: '省份',field: 'sf'},];var data = [{ class: '一班', name: '张三', sex: '男', age: '100', 'sf': '浙江' },{ class: '一班', name: '李四', sex: '女', age: '5', 'sf': '四川' },{ class: '一班', name: '王五', sex: '女', age: '20', 'sf': '河南' },{ class: '一班', name: '小李', sex: '女', age: '26', 'sf': '江苏' },{ class: '二班', name: '小丽', sex: '男', age: '35', 'sf': '湖南' },{ class: '二班', name: '张云', sex: '男', age: '100', 'sf': '吉林' },{ class: '二班', name: '吴强', sex: '女', age: '5', 'sf': '浙江' },{ class: '二班', name: '陈丽', sex: '女', age: '20', 'sf': '内蒙古' },{ class: '二班', name: '谭笑', sex: '女', age: '26', 'sf': '江苏' },{ class: '二班', name: '欧阳', sex: '男', age: '35', 'sf': '福建' },{ class: '二班', name: '李冠', sex: '男', age: '100', 'sf': '宁夏' },{ class: '二班', name: '张物', sex: '女', age: '5', 'sf': '新疆' },{ class: '三班', name: '郭翰', sex: '女', age: '20', 'sf': '西藏' },{ class: '三班', name: '何树', sex: '女', age: '26', 'sf': '广西' },{ class: '三班', name: '田武', sex: '男', age: '35', 'sf': '海南' },{ class: '三班', name: '孔紫', sex: '男', age: '35', 'sf': '山东' }];//将列和数据赋给gridOptions var gridOptions = {columnDefs: columnDefs,rowData: data,defaultColDef: {sortable: true,resizable: true,cellStyle: (params) => {// 判断是不是分组列,如果是的话就不需要设置line-height属性,如果不是的话就需要设置line-height(因为.ag-cell-expandable只对分组列有作用)if (params.column.colId === "ag-Grid-AutoColumn") {return {};}return { "line-height": "28px" };}},// 是否展开分组:默认情况下打开组的级别:-1:展开所有组;0:不展开组;1:只展开第一层组别;2:之展开前两层组别,(我的理解是,数字是几就展开前几层组别,暂时没有进行多个组别的测试)groupDefaultExpanded: 1,// 对组别的设置autoGroupColumnDef: {headerName: '班级(分组后的名称)', // 设置分组之后列的显示名称,如果不设置,则默认显示为“Group”。minWidth: 100, // 设置分组列的最小宽度,其他属性也可以设置,例如:width;maxWidthsort: 'asc', // 对分组进行排序,asc是升序,desc是降序pinned: 'left', // 将分组列固定在左边},rowHeight: 28, // 设置表格行高headerHeight: 30, // 设置表格表头的行高};//在dom加载完成后 初始化agGrid完成document.addEventListener("DOMContentLoaded", function () {var eGridDiv = document.querySelector('#myGrid');new agGrid.Grid(eGridDiv, gridOptions);});</script>
</body></html>
以上便是本篇文章的所有内容,如果有哪位兄台有更完美的解决方法,请不吝赐教!!!!!