ag-grid 学习笔记三:ag-grid设置(定义列、选择行、复选框、设置行高列宽、置顶合计行、底部合计行、行组、客户端排序)

            <div id="content_views" class="htmledit_views">
                <p id="main-toc"><strong>目录</strong></p> 

一 定义列

二 选择行

三 设置复选框

四 设置行高列宽

五 置顶合计行

六 底部合计行

七 行组

八 客户端排序


一 定义列

表格的列有如下常用属性。

名称说明
headerName显示的列名称,和数据没有关系显示给用户看的
field字段,headerName对于的数据字段,如上面代码“姓名”列对应的数据字段是name
pinned列固定(冻结列)的位置,,支持left right,把列固定在左边或者右边
valueFormatter自定义过滤函数,比如数据库status字段存储了0或1数字,想前端网页把 0 显示为正常 1显示为删除,即可使用该属性
function nameFormatter(item)
{
     if(item.value==0) return "正常";
     if(item.value==1) return "删除";
     return "itxst";  
 }
filter过滤器刷选器,定义了过滤器后用户就可以在列头部的输入框对数据进行刷选查找
默认提供了以下几种过滤器
agNumberColumnFilter 数字过滤器
agTextColumnFilter       文本过滤器
agDateColumnFilter       日期过滤器
width, minWidth, maxWidthwidth, minWidth, maxWidth设置任意一个属性来控制列的宽度
hidetrue隐藏 false显示
sort前端排序方式 asc 顺序 desc倒序
sortable设置true 用户点击列的表头可以进行排序。
resizabletrue可以拖动改变列的大小,false不允许用户拖动改变列大小

二 选择行(复选框)

选择行是使用复选框来进行选择。

首先,设置列表复选框,在表头设置代码中添加如下属性便可以进行设置:


 
 
  1. checkboxSelection: true, / /设置数据复选框
  2. headerCheckboxSelection: true 表头是否也显示复选框,用于全选反选用

 然后,设置复选框是用于多选还是单选,如果是mutiple则是多选,若是single则是单选。

  rowSelection: 'multiple', //设置多行选中 ,若是single  
 
 

 设置多行选中时,还可以控制多行选中的方式:

 rowMultiSelectWithClick:true, //单击就选中,如果为false需要按ctrl再点击才能选中多行
 
 

但是控制多选方式自己测试并未实现,还有待解决。

选中数据后,可以根据以下方式获取选中的数据,并转化为Json格式的数据。


 
 
  1. var rows =gridOptions.api.getSelectedRows(); / /获取选中的数据
  2. var JsonData = JSON.stringify(rows)); / /将数据转化为Json格式

 

三设置行高列宽

1.设置行高:在gridOptions 中设置rowHeight 即可。默认为25px。

动态设置行高:


 
 
  1. / /动态设置行高 重新设置为 100px
  2. function setHeight()
  3. {
  4. ag.gridOptions.rowHeight = 100;
  5. ag.gridOptions.api.resetRowHeights();
  6. }

2.设置列宽:在gridOptions 中设置width即可。 

置顶合计行

可以通过pinnedTopRowData把一行或者多行数据置顶在表格的顶部,注意这些行不能选中、排序、刷选和分组。效果如下:

                      

 实现方式:设置置顶行数据data,然后在gridOptions中设置属性pinnedTopRowData,并把置顶行数据赋值给它,并可以用getRowStyle给置顶行数据设置样式。具体代码如下:


 
 
  1. / /置顶行数据
  2. var pinnedTopRowData = [
  3. { name: '置顶行1', sex: '0', age: '15', 'jg': '中国', 'sf': '顶部1', 'dz': '杭州市文一西路' },
  4. { name: '置顶行2', sex: '1', age: '15', 'jg': '中国', 'sf': '顶部2', 'dz': '杭州市文一西路' }
  5. ];
  6. / /将列和数据赋给gridOptions
  7. var gridOptions = {
  8. columnDefs: columnDefs,
  9. rowData: data,
  10. onGridReady: function () {
  11. gridOptions.api.sizeColumnsToFit();
  12. },
  13. defaultColDef: {
  14. editable: true,
  15. enableRowGroup: true,
  16. enablePivot: true,
  17. enableValue: true,
  18. sortable: true,
  19. resizable: true,
  20. filter: true
  21. },
  22. pagination: true,
  23. paginationAutoPageSize: true,
  24. rowSelection: 'multiple',
  25. rowMultiSelectWithClick: true,
  26. rowDeselection: true,
  27. pinnedTopRowData: pinnedTopRowData, / /设置置顶行数据
  28. getRowStyle: function (params) { / /给置顶行数据设置样式
  29. if (params.node.rowPinned) {
  30. return { 'font-weight': 'bold', 'color': 'red' };
  31. }
  32. },
  33. };

       上面的合计行数据是测试定义的死数据,实际上合计行需要对某些列的数据进行合计计算,这就需要遍历怎个列表的列,将同一列的值都加起来,就可以算作是合计行。

底部合计行

设置方式与设置置顶行一样,只不过使用的属性不同,置底合计行用的是:pinnedBottomRowData属性,getRowStyle方法同样可以渲染其属性。

行组

行组,即对行进行分组,只有企业版才有的功能。

效果图如下:

                      

要实现上面的效果,只需要在定义列的时候,在需要合并的列(比如上面的姓名)上加上属性: rowGroup:true即可。然后加上 hide:true属性隐藏本列。如果不隐藏本列,效果如下,看起来不太美观。

整个界面代码如下:


 
 
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  6. <title>设置属性 </title>
  7. <script type="text/javascript" src="../js/ag-grid-enterprise.min.js"> </script>
  8. </head>
  9. <body>
  10. <input type="button" value="获取选中行" onclick="getSelect()" />
  11. <div id="myGrid" style="width: 100%;height: 500px;" class="ag-theme-alpine"> </div>
  12. <script>
  13. //定义表格列
  14. var columnDefs = [
  15. {
  16. headerName: '姓名',
  17. field: 'name',
  18. 'pinned': 'left',
  19. filter: 'agTextColumnFilter',
  20. rowGroup: true,
  21. // checkboxSelection: true, //设置数据复选框
  22. // headerCheckboxSelection: true //列头设置复选框
  23. },
  24. {
  25. headerName: '性别',
  26. field: 'sex',
  27. type: "nonEditableColumn",
  28. valueFormatter: sexFormatter
  29. },
  30. {
  31. headerName: '年龄',
  32. field: 'age',
  33. filter: 'agNumberColumnFilter'
  34. },
  35. {
  36. headerName: '籍贯',
  37. field: 'jg'
  38. },
  39. {
  40. headerName: '省份',
  41. field: 'sf'
  42. },
  43. {
  44. headerName: '地址',
  45. field: 'dz'
  46. },
  47. ];
  48. //将0转化为男,把1转化为女
  49. function sexFormatter( item) {
  50. if (item. value == 0) return "男";
  51. if (item. value == 1) return "女";
  52. return "";
  53. }
  54. var data = [
  55. { name: '张三', sex: '0', age: '100', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路1号' },
  56. { name: '李四', sex: '1', age: '5', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路12号' },
  57. { name: '王五', sex: '1', age: '20', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路31号' },
  58. { name: '王五', sex: '1', age: '26', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路111号' },
  59. { name: '王五', sex: '0', age: '35', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路12号' },
  60. { name: '王五', sex: '0', age: '35', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路12号' },
  61. { name: '王五', sex: '0', age: '35', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路12号' },
  62. { name: '王五', sex: '0', age: '35', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路12号' },
  63. { name: '王五', sex: '0', age: '35', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路12号' },
  64. { name: '王五', sex: '0', age: '35', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路12号' },
  65. { name: '王五', sex: '1', age: '20', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路31号' },
  66. { name: '王五', sex: '1', age: '26', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路111号' },
  67. { name: '王五', sex: '0', age: '35', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路12号' },
  68. { name: '王五', sex: '0', age: '35', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路12号' },
  69. { name: '王五', sex: '0', age: '35', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路12号' },
  70. { name: '王五', sex: '0', age: '35', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路12号' },
  71. { name: '王五', sex: '0', age: '35', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路12号' },
  72. { name: '王五', sex: '0', age: '35', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路12号' },
  73. { name: '王五', sex: '0', age: '35', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路12号' }
  74. ];
  75. //置顶行数据
  76. var pinnedTopRowData = [
  77. { name: '置顶行1', sex: '0', age: '15', 'jg': '中国', 'sf': '顶部1', 'dz': '杭州市文一西路' },
  78. { name: '置顶行2', sex: '1', age: '15', 'jg': '中国', 'sf': '顶部2', 'dz': '杭州市文一西路' }
  79. ];
  80. //置底部数据
  81. var pinnedBottomRowData = [
  82. { name: '置底行1', sex: '0', age: '15', 'jg': '中国', 'sf': '顶部1', 'dz': '杭州市文一西路' },
  83. { name: '置底行2', sex: '1', age: '15', 'jg': '中国', 'sf': '顶部2', 'dz': '杭州市文一西路' }
  84. ];
  85. //将列和数据赋给gridOptions
  86. var gridOptions = {
  87. columnDefs: columnDefs, //设置列名
  88. rowData: data, //设置数据
  89. defaultColDef: {
  90. editable: true, //单元表格是否可编辑
  91. enableRowGroup: true,
  92. enablePivot: true,
  93. enableValue: true,
  94. sortable: true, //开启排序
  95. resizable: true, //是否可以调整列大小,就是拖动改变列大小
  96. filter: true //开启刷选
  97. },
  98. pagination: true, //开启分页(前端分页)
  99. paginationAutoPageSize: true, //根据网页高度自动分页(前端分页)
  100. rowSelection: 'multiple', //设置多行选中 ,若是single
  101. rowMultiSelectWithClick: true,
  102. rowDeselection: true,
  103. // pinnedTopRowData:pinnedTopRowData, //设置置顶合计行数据
  104. // pinnedBottomRowData: pinnedBottomRowData ,//设置置底合计行
  105. getRowStyle: function ( params) { //给置顶(置底)行数据设置样式
  106. if (params. node. rowPinned) {
  107. return { 'font-weight': 'bold', 'color': 'red' };
  108. }
  109. },
  110. onGridReady: function ( ) {
  111. //表格创建完成后执行的事件
  112. gridOptions. api. sizeColumnsToFit(); //调整表格大小自适应
  113. }
  114. };
  115. //在dom加载完成后 初始化agGrid完成
  116. document. addEventListener( "DOMContentLoaded", function ( ) {
  117. var eGridDiv = document. querySelector( '#myGrid'); //myGrid 是容器div的ID
  118. new agGrid. Grid(eGridDiv, gridOptions);
  119. });
  120. //获取选中的数据
  121. function getSelect( ) {
  122. var rows = gridOptions. api. getSelectedRows();
  123. alert( JSON. stringify(rows));
  124. }
  125. </script>
  126. </body>
  127. </html>

 

客户端排序

表格有自动排序的功能,点击列头就可自动排序。

                                                 

注:

此篇文章学习资源来自 ag-grid中文教程网 ag-grid ,在此表示非常感谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值