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

 一  setRowData重新设置表格行数据


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

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

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


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

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

(2) api.updateRowData
            代码如下:
 

function byRowNode() {
 	var selRow = gridOptions.api.getSelectedRows(); //获取选中的行            
 	if (selRow.length <= 0) {                
 	alert("请选中一行数据");                
 	return;            
 	}
 	selRow[0].name = '11111'; //更新选中数据的第一行            
 	gridOptions.api.updateRowData(               
 	 {      
 	 	update: selRow                
 	 });
}

	 

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

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

(2) api.updateRowData
        
        代码如下:
 

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

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

 function add1() {
            var newRow = {
                name: '新增行1',
                sex: '男',
                age: 11
            };
            gridOptions.rowData.push(newRow)
            gridOptions.api.setRowData(gridOptions.rowData);
        }
 
	 

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

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

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

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

三 ag-grid全选反选


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

四 setColumnDefs新增列 

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

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

五 插入新行

  function addRow() {

            var newdata = {
                name: '马六',
                sex: '男',
                age: '100',
                address: '绵阳'
            };

            //data 是原始的数据
            data.push(newdata);
            //添加新的行
            gridOptions.api.setRowData(data);
        }

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

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

   onGridReady: function () {
                //表格创建完成后执行的事件
                gridOptions.api.sizeColumnsToFit();//调整表格大小自适应,若是不设置,则表格可能不能充满容器
                staticsCount();
            }
function staticsCount() {
            var age = 0;
             for (var i = 0; i < data.length; i++) {
                age = age + parseInt(data[i].age) ;
            }

            var topRows = [
                { name: '合计', age: age}
            ];

            gridOptions.api.setPinnedTopRowData(topRows);  //在顶部显示合计行
            gridOptions.api.setPinnedBottomRowData(topRows);  //在底部显示合计行
        }

实现结果:

                        

七 遍历行对象

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

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

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

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

       以下代码是以foreachnode为例子:

 function ForeachAllRows() {
            var rowNode = gridOptions.api.forEachLeafNode(function (node, index) {
                var x = JSON.stringify(node.data);
                alert(x);
            });
        }

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

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

    具体使用代码如下:

     

      //置顶行行数
        function GetTopRowCount() {
            var count = gridOptions.api.getPinnedTopRowCount();
            alert(count);
        }

        //置顶行数据
        function GetTopRowData() {
            var topRow = gridOptions.api.getPinnedTopRow(0);  //获取第一个置顶行数据
            var x = JSON.stringify(topRow.data);
            alert(x);
        }

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

      

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

    具体使用代码如下:

//底部合计行行数
        function GetBottomRowCount() {
            var count = gridOptions.api.getPinnedBottomRowCount();
            alert(count);
        }

        //底部合计行数据
        function GetBottomRowData() {
            var topRow = gridOptions.api.getPinnedBottomRow(0);  //获取第一个置顶行数据
            var x = JSON.stringify(topRow.data);
            alert(x);
        }

十 getRowNode获取行对象

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

      具体使用代码如下所示:

     

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

效果如下图

                         十二

十一  refreshCells刷新更新数据

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

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

具体使用代码如下:

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

 十二 单元格焦点相关方法

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

        //设置焦点
        function setFocusedCell() {
            //cell对象为{rowIndex: 0, column: Column, floating: null}
            var cell = gridOptions.api.setFocusedCell(2, 'name', null);
        }
        //取当前焦点的单元格
        function getFocusedCell() {

            var cell = gridOptions.api.getFocusedCell();
        }
        //清除焦点
        function clearFocusedCell() {
            gridOptions.api.clearFocusedCell();
        }
        //设置下一个单元格为当前焦点
        function tabToNextCell() {
            gridOptions.api.tabToNextCell();
        }
        //设置上一个单元格为当前焦点
        function tabToPreviousCell() {
            gridOptions.api.tabToPreviousCell();
        }

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

<!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>
    <script type="text/javascript" src="../js/ag-grid-enterprise.min.js"></script>

</head>

<!-- 此页面包含功能:点击按钮实现全选和反选、 列自适应大小-->

<body>
    <input type="button" value="全选" onclick="func1()" />
    <input type="button" value="清空选中" onclick="func2()" />
    <input type="button" value="反选(暂未实现)" onclick="func3()" />
    <input type="button" value="获取选中行" onclick="func4()" />
    <input type="button" value=" 新增列 " onclick="addColumn()" />
    <input type="button" value=" 新增行 " onclick="addRow()" />
    <input type="button" value="遍历行" onclick="ForeachAllRows()" />
    <input type="button" value="获取置顶行数量" onclick="GetTopRowCount()" />
    <input type="button" value="获取置顶行对象" onclick="GetTopRowData()" />
    <input type="button" value="获取底部合计行数量" onclick="GetBottomRowCount()" />
    <input type="button" value="获取底部合计行对象" onclick="GetBottomRowData()" />
    <input type="button" value="获取行对象" onclick="GetRowDatas()" />
    <input type="button" value="更新数据" onclick="refreshData()" />
    <input type="button" value="setFocusedCell" onclick="setFocusedCell()" />
    <input type="button" value="getFocusedCell" onclick="getFocusedCell()" />
    <input type="button" value="clearFocusedCell" onclick="clearFocusedCell()" />
    <input type="button" value="tabToNextCell" onclick="tabToNextCell()" />
    <input type="button" value="tabToPreviousCell" onclick="tabToPreviousCell()" />
    <div style="width: 100%;height:100%;">
        <div id="myGrid" style="width: 80%;height: 500px;" class="ag-theme-alpine"></div>
    </div>

    <script>
        //定义表格列
        var columnDefs = [
            {
                headerName: '姓名',
                field: 'name',
                'pinned': 'left',
                width: '100',
                checkboxSelection: true, //设置数据复选框
                headerCheckboxSelection: true  //列头设置复选框
            }, {
                headerName: '性别',
                width: '100',
                field: 'sex'
            }, {
                headerName: '年龄',
                width: '100',
                field: 'age'
            }
        ];


        //与列对应的数据; 属性名对应上面的field
        var data = [
            {
                name: '张三',
                sex: '男',
                age: '100',
                address: '绵阳'
            }, {
                name: '李四',
                sex: '女',
                age: '5',
                address: '广州'

            }, {
                name: '王五',
                sex: '男',
                age: '35',
                address: '成都'

            }
        ];

        //将列和数据赋给gridOptions 
        var gridOptions = {
            columnDefs: columnDefs,  //设置列名
            rowData: data,  //设置数据
            /***********************************2.设置表格大小自适应*********************************/
            onGridReady: function () {
                //表格创建完成后执行的事件
                gridOptions.api.sizeColumnsToFit();//调整表格大小自适应,若是不设置,则表格可能不能充满容器
                staticsCount();
            },
            defaultColDef: {
                editable: true,//单元表格是否可编辑
                enableRowGroup: true,
                enablePivot: true,
                enableValue: true,
                sortable: true, //开启排序
                resizable: true,//是否可以调整列大小,就是拖动改变列大小
                filter: true  //开启刷选
            },
            pagination: true,  //开启分页(前端分页)
            paginationAutoPageSize: true, //根据网页高度自动分页(前端分页)
            rowSelection: 'multiple'

        };

        //在dom加载完成后 初始化agGrid完成
        document.addEventListener("DOMContentLoaded", function () {
            var eGridDiv = document.querySelector('#myGrid');  //myGrid 是容器div的ID
            new agGrid.Grid(eGridDiv, gridOptions);
        });


        /*******************************************1.全选、反选、按条件筛选、获取选中行************************************************/
        //全选
        function func1() {
            gridOptions.api.selectAll();
        }
        //清空选中
        function func2() {
            gridOptions.api.deselectAll();
        }
        //反选
        function func3() {
            // gridOptions.api.selectAllFiltered();
            gridOptions.api.deselectAllFiltered();
        }
        //获取选中行数据
        function func4() {
            var rows = gridOptions.api.getSelectedRows();
            alert(JSON.stringify(rows));
        }


        /*******************************************3.新增列************************************************/
        function addColumn() {
            columnDefs.push({ headerName: '地址', field: 'address' });
            gridOptions.api.setColumnDefs(columnDefs);
            //调整表格大小自适应
            gridOptions.api.sizeColumnsToFit();
        }

        /**********************************************4.插入新行*********************************************************/

        function addRow() {

            var newdata = {
                name: '马六',
                sex: '男',
                age: '100',
                address: '绵阳'
            };

            //data 是原始的数据
            data.push(newdata);
            //添加新的行
            gridOptions.api.setRowData(data);
        }


        /**********************************************5.插入新行*********************************************************/
        function staticsCount() {
            var age = 0;
            for (var i = 0; i < data.length; i++) {
                age = age + parseInt(data[i].age);
            }

            var topRows = [
                { name: '合计', age: age }
            ];

            gridOptions.api.setPinnedTopRowData(topRows);  //在顶部显示合计行
            gridOptions.api.setPinnedBottomRowData(topRows);  //在底部显示合计行
        }

        /**********************************************6.遍历行对象*********************************************************/

        function ForeachAllRows() {
            var rowNode = gridOptions.api.forEachLeafNode(function (node, index) {
                var x = JSON.stringify(node.data);
                alert(x);
            });
        }


        /**********************************************7.获取置顶行行数以及数据*********************************************************/

        //置顶行行数
        function GetTopRowCount() {
            var count = gridOptions.api.getPinnedTopRowCount();
            alert(count);
        }

        //置顶行数据
        function GetTopRowData() {
            var topRow = gridOptions.api.getPinnedTopRow(0);  //获取第一个置顶行数据
            var x = JSON.stringify(topRow.data);
            alert(x);
        }
        /**********************************************8.获取底部合计行数以及数据*********************************************************/

        //底部合计行行数
        function GetBottomRowCount() {
            var count = gridOptions.api.getPinnedBottomRowCount();
            alert(count);
        }

        //底部合计行数据
        function GetBottomRowData() {
            var topRow = gridOptions.api.getPinnedBottomRow(0);  //获取第一个置顶行数据
            var x = JSON.stringify(topRow.data);
            alert(x);
        }

        /**********************************************9.获取行对象*********************************************************/
        function GetRowDatas() {
            var rowNode = gridOptions.api.getRowNode(2); //获取第三行数据
            var x = JSON.stringify(rowNode.data);
            alert(x);
        }
        /**********************************************10.更新数据*********************************************************/
        function refreshData() {
            data[0].name = 'good';  //更新第一行的名字为good
            var params = {
                force: true
            };
            gridOptions.api.refreshCells(params);
        }
        /**********************************************11.表格焦点相关*********************************************************/

        //设置焦点
        function setFocusedCell() {
            //cell对象为{rowIndex: 0, column: Column, floating: null}
            var cell = gridOptions.api.setFocusedCell(2, 'name', null);
        }
        //取当前焦点的单元格
        function getFocusedCell() {

            var cell = gridOptions.api.getFocusedCell();
        }
        //清除焦点
        function clearFocusedCell() {
            gridOptions.api.clearFocusedCell();
        }
        //设置下一个单元格为当前焦点
        function tabToNextCell() {
            gridOptions.api.tabToNextCell();
        }
        //设置上一个单元格为当前焦点
        function tabToPreviousCell() {
            gridOptions.api.tabToPreviousCell();
        }
    </script>
</body>

</html>

这个代码界面如图所示:

注:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值