ag-grid 学习笔记四:ag-grid方法(重设行数据、增删改、反选、新增列、插入新行、合计行接口、遍历行对象、获取置顶行数量、获取底部合计行对象、获取行对象、刷新、单元格焦点)

转载至:https://blog.csdn.net/WQearl/article/details/106670953

            <div id="content_views" class="htmledit_views">
                <h3><a name="t0"></a>&nbsp;一&nbsp; setRowData重新设置表格行数据</h3> 


        重新设置表格数据很简单,只需要调用 gridOptions.api.setRowData(数据集)接口传入数据即可。
    以下函数为调用方式。
 


 
 
  1. function resetGrid( ) {
  2. //新的数据项
  3. var Newdata = [
  4. { name: '小明', sex: '男', age: '100', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路1号' },
  5. { name: '小花', sex: '女', age: '5', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路12号' },
  6. { name: '小张', sex: '男', age: '100', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路1号' },
  7. { name: '小蓝', sex: '女', age: '5', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路12号' },
  8. { name: '小华', sex: '男', age: '35', 'jg': '中国', 'sf': '浙江', 'dz': '杭州市古墩路12号' }
  9. ];
  10. //调用接口重新设置数据
  11. gridOptions. api. setRowData( Newdata);
  12. }
  13. `` `
  14. # 二 ag

二 ag-grid增加行删除行修改行


    1. 更新行数据
        更新行数据一共有两种接口方法,分别是rowNode.setData和api.updateRowData。
        (1) rowNode.setData
            代码如下:


 
 
  1. function bySetRows( ) {
  2. //第一种方法,通过setData更新,首先获取需要更新的节点
  3. var rowNode = gridOptions. api. getRowNode( 2); //获取表格第3行数据
  4. //更新数据
  5. var newRow = {
  6. id: '66',
  7. name: 'it小书童',
  8. url: 'itxst.com',
  9. catalog: Math. floor( Math. random() * 100000)
  10. };
  11. rowNode. setData(newRow);
  12. }

(2) api.updateRowData
            代码如下:
 


 
 
  1. function byRowNode( ) {
  2. var selRow = gridOptions. api. getSelectedRows(); //获取选中的行
  3. if (selRow. length <= 0) {
  4. alert( "请选中一行数据");
  5. return;
  6. }
  7. selRow[ 0]. name = '11111'; //更新选中数据的第一行
  8. gridOptions. api. updateRowData(
  9. {
  10. update: selRow
  11. });
  12. }

3. 删除数据
        删除行数据跟更新数据一样的,也是使用rowNode.setData和api.updateRowData这两种方式。
        (1) rowNode.setData
            
        代码如下:
 


 
 
  1. function delSetRows( ) {
  2. gridOptions. rowData. splice( 0, 1); //删除第一行数据
  3. gridOptions. api. setRowData(gridOptions. rowData);
  4. }

(2) api.updateRowData
        
        代码如下:
 


 
 
  1. function delRowNode( ) {
  2. var selRows = gridOptions. api. getSelectedRows(); //获取选中的行
  3. if (selRows. length <= 0) {
  4. alert( "请选中一行数据");
  5. }
  6. gridOptions. api. updateRowData({ remove: selRows });
  7. }

5. 新增行数据
        新增行数据有三种方式。
        (1) 通过api.setRowData新增行
            代码如下:
        


 
 
  1. function add1( ) {
  2. var newRow = {
  3. name: '新增行1',
  4. sex: '男',
  5. age: 11
  6. };
  7. gridOptions. rowData. push(newRow)
  8. gridOptions. api. setRowData(gridOptions. rowData);
  9. }

(2) 通过updateRowData新增
        代码如下:
 


 
 
  1. function add2( ) {
  2. var newRows = [{
  3. name: '新增行2',
  4. sex: '女',
  5. age: 12
  6. }];
  7. gridOptions. api. updateRowData({ add: newRows });
  8. }

(3) 新增到指定行
        代码如下:
 


 
 
  1. function add3( ) {
  2. var newRows = [{
  3. name: '插入行3',
  4. sex: '女',
  5. age: 44
  6. }];
  7. gridOptions. api. updateRowData({ add: newRows, addIndex: 1 });
  8. }

三 ag-grid全选反选


    1. 全选
        调用gridOptions.api.selectAll();接口即可。
    2. 清空选中
        调用gridOptions.api.deselectAll();接口
    3. 反选
        暂时没有发现反选的接口。
    4. 获取选中行
        调用gridOptions.api.getSelectedRows();接口         

四 setColumnDefs新增列 

            新增列,具体功能看以下代码:


 
 
  1. function addColumn( ) {
  2. columnDefs. push({ headerName: '地址', field: 'address' });
  3. gridOptions. api. setColumnDefs(columnDefs);
  4. //调整表格大小自适应
  5. gridOptions. api. sizeColumnsToFit();
  6. }

五 插入新行


 
 
  1. function addRow( ) {
  2. var newdata = {
  3. name: '马六',
  4. sex: '男',
  5. age: '100',
  6. address: '绵阳'
  7. };
  8. //data 是原始的数据
  9. data. push(newdata);
  10. //添加新的行
  11. gridOptions. api. setRowData(data);
  12. }

六 汇总行(汇总在底部和汇总在顶部)

         在上篇也学习过汇总行,只不过本篇是调用接口进行汇总行设置,并在onGridReady: function ()中进行调用,而不是像上篇一样使用的属性,在顶部合计使用接口 gridOptions.api.setPinnedTopRowData(topRows);在底部合计使用: gridOptions.api.setPinnedBottomRowData(topRows);


 
 
  1. onGridReady: function ( ) {
  2. //表格创建完成后执行的事件
  3. gridOptions. api. sizeColumnsToFit(); //调整表格大小自适应,若是不设置,则表格可能不能充满容器
  4. staticsCount();
  5. }

 
 
  1. function staticsCount( ) {
  2. var age = 0;
  3. for ( var i = 0; i < data. length; i++) {
  4. age = age + parseInt(data[i]. age) ;
  5. }
  6. var topRows = [
  7. { name: '合计', age: age}
  8. ];
  9. gridOptions. api. setPinnedTopRowData(topRows); //在顶部显示合计行
  10. gridOptions. api. setPinnedBottomRowData(topRows); //在底部显示合计行
  11. }

实现结果:

                        

七 遍历行对象

       1.forEachNode方法遍历行对象,参数为回调方法,执行回调方法时会传入node行节点对象和index当前索引,类似js的数组的forEach方法。注意遍历的是所有行包含被筛选过滤的行;

       2.forEachNodeAfterFilter方法遍历的筛选后的行;

       3.forEachNodeAfterFilterAndSort循环筛选排序后的行;

      4.forEachNode返回包含所有的行节点对象,包括分组产生的新行(行组就是类似树形结构的显示效果),而forEachLeafNode方法只返回原始数据产生的行数据。

       以下代码是以foreachnode为例子:


 
 
  1. function ForeachAllRows( ) {
  2. var rowNode = gridOptions. api. forEachLeafNode( function ( node, index) {
  3. var x = JSON. stringify(node. data);
  4. alert(x);
  5. });
  6. }

八 获取置顶行数量和置顶行数据

      getPinnedTopRowCount方法获取置顶行数量,而getPinnedTopRow方法返回对象为rowNode对象。

    具体使用代码如下:

     


 
 
  1. //置顶行行数
  2. function GetTopRowCount( ) {
  3. var count = gridOptions. api. getPinnedTopRowCount();
  4. alert(count);
  5. }
  6. //置顶行数据
  7. function GetTopRowData( ) {
  8. var topRow = gridOptions. api. getPinnedTopRow( 0); //获取第一个置顶行数据
  9. var x = JSON. stringify(topRow. data);
  10. alert(x);
  11. }

九 获取底部行数量和置顶行数据

      

     getPinnedBottomRowCount方法获取置顶行数量,而getPinnedBottomRow方法返回对象为rowNode对象。

    具体使用代码如下:


 
 
  1. //底部合计行行数
  2. function GetBottomRowCount( ) {
  3. var count = gridOptions. api. getPinnedBottomRowCount();
  4. alert(count);
  5. }
  6. //底部合计行数据
  7. function GetBottomRowData( ) {
  8. var topRow = gridOptions. api. getPinnedBottomRow( 0); //获取第一个置顶行数据
  9. var x = JSON. stringify(topRow. data);
  10. alert(x);
  11. }

十 getRowNode获取行对象

      getRowNode获取行对象,行对象包含行原始数据、行高等各种属性。

      具体使用代码如下所示:

     


 
 
  1. function GetRowDatas() {
  2. var rowNode = gridOptions.api.getRowNode( 2); / /获取第三行数据
  3. var x = JSON.stringify(rowNode. data);
  4. alert(x);
  5. }

效果如下图

                         十二

十一  refreshCells刷新更新数据

             ag-grid可以通过refreshCells方法来更新表格显示的数据(也可以通过updateRowData 或者 updateRowData)更新。

方法说明应用场景
updateRowData 整个表格更新分页加载的全部数据
updateRowData 整行数据更新选中行弹出层,编辑表单
refreshCells单元格更新双击单元格进行编辑更新数据

具体使用代码如下:


 
 
  1. function refreshData( ) {
  2. data[ 0]. name = 'good'; //更新第一行的名字为good
  3. var params = {
  4. force: true
  5. };
  6. gridOptions. api. refreshCells(params);
  7. }

 十二 单元格焦点相关方法

           单元格相关的方法包含getFocusedCell、 setFocusedCell 、clearFocusedCell 、tabToNextCell 、tabToPreviousCell


 
 
  1. //设置焦点
  2. function setFocusedCell( ) {
  3. //cell对象为{rowIndex: 0, column: Column, floating: null}
  4. var cell = gridOptions. api. setFocusedCell( 2, 'name', null);
  5. }
  6. //取当前焦点的单元格
  7. function getFocusedCell( ) {
  8. var cell = gridOptions. api. getFocusedCell();
  9. }
  10. //清除焦点
  11. function clearFocusedCell( ) {
  12. gridOptions. api. clearFocusedCell();
  13. }
  14. //设置下一个单元格为当前焦点
  15. function tabToNextCell( ) {
  16. gridOptions. api. tabToNextCell();
  17. }
  18. //设置上一个单元格为当前焦点
  19. function tabToPreviousCell( ) {
  20. gridOptions. api. tabToPreviousCell();
  21. }

以下是这篇笔记所涉及到的所有代码,可以直接运行。


 
 
  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>ag-grid入门示例 </title>
  7. <script type="text/javascript" src="../js/ag-grid-enterprise.min.js"> </script>
  8. </head>
  9. <!-- 此页面包含功能:点击按钮实现全选和反选、 列自适应大小-->
  10. <body>
  11. <input type="button" value="全选" onclick="func1()" />
  12. <input type="button" value="清空选中" onclick="func2()" />
  13. <input type="button" value="反选(暂未实现)" onclick="func3()" />
  14. <input type="button" value="获取选中行" onclick="func4()" />
  15. <input type="button" value=" 新增列 " onclick="addColumn()" />
  16. <input type="button" value=" 新增行 " onclick="addRow()" />
  17. <input type="button" value="遍历行" onclick="ForeachAllRows()" />
  18. <input type="button" value="获取置顶行数量" onclick="GetTopRowCount()" />
  19. <input type="button" value="获取置顶行对象" onclick="GetTopRowData()" />
  20. <input type="button" value="获取底部合计行数量" onclick="GetBottomRowCount()" />
  21. <input type="button" value="获取底部合计行对象" onclick="GetBottomRowData()" />
  22. <input type="button" value="获取行对象" onclick="GetRowDatas()" />
  23. <input type="button" value="更新数据" onclick="refreshData()" />
  24. <input type="button" value="setFocusedCell" onclick="setFocusedCell()" />
  25. <input type="button" value="getFocusedCell" onclick="getFocusedCell()" />
  26. <input type="button" value="clearFocusedCell" onclick="clearFocusedCell()" />
  27. <input type="button" value="tabToNextCell" onclick="tabToNextCell()" />
  28. <input type="button" value="tabToPreviousCell" onclick="tabToPreviousCell()" />
  29. <div style="width: 100%;height:100%;">
  30. <div id="myGrid" style="width: 80%;height: 500px;" class="ag-theme-alpine"> </div>
  31. </div>
  32. <script>
  33. //定义表格列
  34. var columnDefs = [
  35. {
  36. headerName: '姓名',
  37. field: 'name',
  38. 'pinned': 'left',
  39. width: '100',
  40. checkboxSelection: true, //设置数据复选框
  41. headerCheckboxSelection: true //列头设置复选框
  42. }, {
  43. headerName: '性别',
  44. width: '100',
  45. field: 'sex'
  46. }, {
  47. headerName: '年龄',
  48. width: '100',
  49. field: 'age'
  50. }
  51. ];
  52. //与列对应的数据; 属性名对应上面的field
  53. var data = [
  54. {
  55. name: '张三',
  56. sex: '男',
  57. age: '100',
  58. address: '绵阳'
  59. }, {
  60. name: '李四',
  61. sex: '女',
  62. age: '5',
  63. address: '广州'
  64. }, {
  65. name: '王五',
  66. sex: '男',
  67. age: '35',
  68. address: '成都'
  69. }
  70. ];
  71. //将列和数据赋给gridOptions
  72. var gridOptions = {
  73. columnDefs: columnDefs, //设置列名
  74. rowData: data, //设置数据
  75. /***********************************2.设置表格大小自适应*********************************/
  76. onGridReady: function ( ) {
  77. //表格创建完成后执行的事件
  78. gridOptions. api. sizeColumnsToFit(); //调整表格大小自适应,若是不设置,则表格可能不能充满容器
  79. staticsCount();
  80. },
  81. defaultColDef: {
  82. editable: true, //单元表格是否可编辑
  83. enableRowGroup: true,
  84. enablePivot: true,
  85. enableValue: true,
  86. sortable: true, //开启排序
  87. resizable: true, //是否可以调整列大小,就是拖动改变列大小
  88. filter: true //开启刷选
  89. },
  90. pagination: true, //开启分页(前端分页)
  91. paginationAutoPageSize: true, //根据网页高度自动分页(前端分页)
  92. rowSelection: 'multiple'
  93. };
  94. //在dom加载完成后 初始化agGrid完成
  95. document. addEventListener( "DOMContentLoaded", function ( ) {
  96. var eGridDiv = document. querySelector( '#myGrid'); //myGrid 是容器div的ID
  97. new agGrid. Grid(eGridDiv, gridOptions);
  98. });
  99. /*******************************************1.全选、反选、按条件筛选、获取选中行************************************************/
  100. //全选
  101. function func1( ) {
  102. gridOptions. api. selectAll();
  103. }
  104. //清空选中
  105. function func2( ) {
  106. gridOptions. api. deselectAll();
  107. }
  108. //反选
  109. function func3( ) {
  110. // gridOptions.api.selectAllFiltered();
  111. gridOptions. api. deselectAllFiltered();
  112. }
  113. //获取选中行数据
  114. function func4( ) {
  115. var rows = gridOptions. api. getSelectedRows();
  116. alert( JSON. stringify(rows));
  117. }
  118. /*******************************************3.新增列************************************************/
  119. function addColumn( ) {
  120. columnDefs. push({ headerName: '地址', field: 'address' });
  121. gridOptions. api. setColumnDefs(columnDefs);
  122. //调整表格大小自适应
  123. gridOptions. api. sizeColumnsToFit();
  124. }
  125. /**********************************************4.插入新行*********************************************************/
  126. function addRow( ) {
  127. var newdata = {
  128. name: '马六',
  129. sex: '男',
  130. age: '100',
  131. address: '绵阳'
  132. };
  133. //data 是原始的数据
  134. data. push(newdata);
  135. //添加新的行
  136. gridOptions. api. setRowData(data);
  137. }
  138. /**********************************************5.插入新行*********************************************************/
  139. function staticsCount( ) {
  140. var age = 0;
  141. for ( var i = 0; i < data. length; i++) {
  142. age = age + parseInt(data[i]. age);
  143. }
  144. var topRows = [
  145. { name: '合计', age: age }
  146. ];
  147. gridOptions. api. setPinnedTopRowData(topRows); //在顶部显示合计行
  148. gridOptions. api. setPinnedBottomRowData(topRows); //在底部显示合计行
  149. }
  150. /**********************************************6.遍历行对象*********************************************************/
  151. function ForeachAllRows( ) {
  152. var rowNode = gridOptions. api. forEachLeafNode( function ( node, index) {
  153. var x = JSON. stringify(node. data);
  154. alert(x);
  155. });
  156. }
  157. /**********************************************7.获取置顶行行数以及数据*********************************************************/
  158. //置顶行行数
  159. function GetTopRowCount( ) {
  160. var count = gridOptions. api. getPinnedTopRowCount();
  161. alert(count);
  162. }
  163. //置顶行数据
  164. function GetTopRowData( ) {
  165. var topRow = gridOptions. api. getPinnedTopRow( 0); //获取第一个置顶行数据
  166. var x = JSON. stringify(topRow. data);
  167. alert(x);
  168. }
  169. /**********************************************8.获取底部合计行数以及数据*********************************************************/
  170. //底部合计行行数
  171. function GetBottomRowCount( ) {
  172. var count = gridOptions. api. getPinnedBottomRowCount();
  173. alert(count);
  174. }
  175. //底部合计行数据
  176. function GetBottomRowData( ) {
  177. var topRow = gridOptions. api. getPinnedBottomRow( 0); //获取第一个置顶行数据
  178. var x = JSON. stringify(topRow. data);
  179. alert(x);
  180. }
  181. /**********************************************9.获取行对象*********************************************************/
  182. function GetRowDatas( ) {
  183. var rowNode = gridOptions. api. getRowNode( 2); //获取第三行数据
  184. var x = JSON. stringify(rowNode. data);
  185. alert(x);
  186. }
  187. /**********************************************10.更新数据*********************************************************/
  188. function refreshData( ) {
  189. data[ 0]. name = 'good'; //更新第一行的名字为good
  190. var params = {
  191. force: true
  192. };
  193. gridOptions. api. refreshCells(params);
  194. }
  195. /**********************************************11.表格焦点相关*********************************************************/
  196. //设置焦点
  197. function setFocusedCell( ) {
  198. //cell对象为{rowIndex: 0, column: Column, floating: null}
  199. var cell = gridOptions. api. setFocusedCell( 2, 'name', null);
  200. }
  201. //取当前焦点的单元格
  202. function getFocusedCell( ) {
  203. var cell = gridOptions. api. getFocusedCell();
  204. }
  205. //清除焦点
  206. function clearFocusedCell( ) {
  207. gridOptions. api. clearFocusedCell();
  208. }
  209. //设置下一个单元格为当前焦点
  210. function tabToNextCell( ) {
  211. gridOptions. api. tabToNextCell();
  212. }
  213. //设置上一个单元格为当前焦点
  214. function tabToPreviousCell( ) {
  215. gridOptions. api. tabToPreviousCell();
  216. }
  217. </script>
  218. </body>
  219. </html>

这个代码界面如图所示:

注:

          此篇笔记学习自 ag-grid中文教程  ,大部分东西都是从中学习而来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值