表格列表常用方法和事件以及事件触发的时机

一、 获取表格的vm对象


首先要清楚,要想使用表格gridModel原型上的方法和事件,就要先获取表格的实例对象,通过以下代码获取;

function (event) {
    var viewModel = this;
    //页面只有一个表格时,获取表格vm对象的方法,通过如下代码获取
    var gridModel = viewModel.getGridModel();
    //页面有多个表格时,获取某个表格vm对象的方法,通过表格的childrenfield属性值或者cCode,获取指定表格vm对象
    var gridModel = viewModel.get('childrenfield'/'cCode');
}

二、 表格常用方法汇总

1、控制是否显示表格序号

function (event) {
    var viewModel = this;
    var gridModel = viewModel.getGridModel();
    //控制是否显示表格序号,通过'showRowNo'字段状态来控制,bool类型 true:显示,false:隐藏
    gridModel.setState('showRowNo', true);
}

2、控制是否显示列设置(表格右上角三个点)

function (event) {
    var viewModel = this;
    var gridModel = viewModel.getGridModel();
    //控制是否显示列设置,通过'showColumnSetting'字段状态来控制,bool类型 true:显示,false:隐藏
    gridModel.setState('showColumnSetting', true);
}

3、控制是否显示分页(正常元数据渲染情况下)

function (event) {
    var viewModel = this;
    var gridModel = viewModel.getGridModel();
    //控制是否显示分页(正常元数据渲染情况下),通过'pagination'字段状态来控制,bool类型 true:显示,false:隐藏
    gridModel.setState('pagination', true);    
}

4、获取表格行模型

function (event) {
    var viewModel = this;
    var gridModel = viewModel.getGridModel();
    //获取表格行模型(编辑态)
    gridModel.getEditRowModel();   
}

5、获取表格列模型

function (event) {
    var viewModel = this;
    var gridModel = viewModel.getGridModel();
    //获取表格列模型
    gridModel.getEditRowModel().get('表格列字段名');
}

6、控制是否展示多选框(以下两种方式都可以)

function (event) {
    var viewModel = this;
    var gridModel = viewModel.getGridModel();
    //控制表格是否展示多选框(以下两种方式都可以)
    //1.通过setShowCheckbox()方法来控制,bool类型 true:显示,false:隐藏
    gridModel.setShowCheckbox(true);
    //2.通过'showCheckBox'字段状态来控制,bool类型 true:显示,false:隐藏
    gridModel.setState('showCheckBox', true);   
}

7、控制表格每页显示的数据条数(两种情况,分开讲解)

function (event) {
    var viewModel = this;
    var gridModel = viewModel.getGridModel();
    //1.表格第一次加载,在表格数据加载之前设置分页条数(第一种情况)
    //数据加载之前
    gridModel.on('beforeLoad', function (data){
        //通过setPageInfo()方法设置,参数为object->{pageSize:number,pageIndex:number,recordCount:number}
        //pageSize:分页条数 pageIndex:当前页码 recordCount:数据总条数
        gridModel.setPageInfo({
            pageSize:5,
            pageIndex:1,
            recordCount:20
        })
    });
    //2.表格数据通过API函数调取第三方接口实现时,分页组件需要监听触发分页函数pageInfoChange,设置分页信息(第二种情况)
    //分页触发函数
    gridModel.on('pageInfoChange',function(){
        //获取当前页码
        var pageIndex = gridModel.getPageIndex();
        //获取当前页条数
        var pageSize = gridModel.getPageSize();
        //调取API函数查询数据
        cb.rest.invokeFunction("接口地址", {pageIndex,pageSize,...others},
            function(err, res) {
                var data = res.data;
                //设置数据模式为本地
                gridModel.setState('dataSourceMode','local');
                //设置表格数据
                gridModel.setDataSource(data.recordList);
                //通过setPageInfo()方法设置,参数为object->{pageSize:number,pageIndex:number,recordCount:number}
                //pageSize:分页条数 pageIndex:当前页码 recordCount:数据总条数
                gridModel.setPageInfo({
                    pageSize:data.pageSize,
                    pageIndex:data.pageIndex,
                    recordCount:data.recordCount
                })
            })
        })
}

8、表格动态设置选中行/取消选中,需要在设置数据之后

function (event) {
    var viewModel = this;
    var gridModel = viewModel.getGridModel();
    //表格数据加载完成-钩子
    gridModel.on('afterSetDataSource',function(data){
        //表格动态设置选中行,需要在设置数据之后
        var rowIndex=[0,1,4];
        gridModel.select(rowIndex);//参数也可以是数组
        //取消选中 rowIndexes 参数也可以是数组
        gridModel.unselect(rowIndexes) 
    }) 
}

9、表格数据列合并方法

function (event) {
    var viewModel = this;
    var gridModel = viewModel.getGridModel();
    /*  表格数据列合并方法
        目前列合并有两种方式:
          1、顺序合并;2、按数据合并。表格模型中mergeMode来标识当前合并的方式,1为顺序合并,2为数据合并。默认为顺序合并。
          最好使用顺序合并!!!
    */
    //开启合并模式
    gridModel.setState('mergeCells',true);
    //某个列是否开启列合并的功能通过设置bMergeCol 属性来控制,true开启,false为关闭。通过扩展脚本可以动态设置
    gridModel.setColumnState('new1','bMergeCol',true);
}

10、表格动态设置行颜色、列颜色 column:列名 index:行号

function (event) {
    var viewModel = this;
    var gridModel = viewModel.getGridModel();
    //表格动态设置行颜色、列颜色  column:列名 index:行号
    //设置表格列CSS样式
    gridModel.setColumnState('new1','style',{backgroundColor:'red'});
    gridModel.setColumnState('giftstype', 'className', 'highlight-red');
    //设置表格行CSS样式
    gridModel.setRowState(3, 'className', 'highlight-red');
}

11、表格自定义列输出(可参考前端扩展开发-组件扩展-表格组件扩展)

function (event) {
    var viewModel = this;
    var gridModel = viewModel.getGridModel();
    //在项目中增加扩展的组件 加在extend formatter目录下
    //将组件注册到扩展组件中 
    //在init初始化去调用 column:列名字段
    gridModel.setColumnState(column, 'formatter', (rowInfo, rowData, fullName = "bd.project.ProjectVO") => {
        return { 
            formatterKey: 'DeleteLabel',//自定义输出组件
            props: {
                rowInfo,
                rowData,
                fullName
            }
        }
    })
}

12、动态控制表格列的显示隐藏,需要在设置数据之后(触发时机:表格数据加载完成)(两种方式)

function (event) {
    var viewModel = this;
    var gridModel = viewModel.getGridModel();
    //表格数据加载完成-钩子
    gridModel.on('afterSetDataSource',function(data){
        //1.动态控制表格列的显示隐藏,需要在设置数据之后,根绝'visible'属性判断,bool类型 true:显示,false:隐藏
        gridModel.setColumnState('new3', 'visible', true);
        //2.表格动态新增虚拟列标准做法是 把这列配进去 根据条件显示隐藏(效果同上)
        gridModel.setColumnState('new1', 'bShowIt', true);
    }) 
}

13、表格动态赋值(需要考虑赋值后,分页控件的设置)

function (event) {
    var viewModel = this;
    var gridModel = viewModel.getGridModel();
    //1、直接赋值
    var data = [];
    gridModel.setState('dataSourceMode', 'local'); // 确保是local模式
    gridModel.setDataSource(data);

    //2、调用接口赋值
    gridModel.set('dataSourceMode', null);
    gridModel.setDataSource({
        method: 'POST',
        options: { mask: true, uniform: false },
        url: 'xxx/xxx/xxx/xx'
        }, params, function (res) {

    })
}

14、表格里面自定义按钮动作逻辑处理(触发时机:表格数据加载完成之后)

function (event) {
    var viewModel = this;
    var gridModel = viewModel.getGridModel();
    //表格数据加载完成-钩子
    gridModel.on('afterSetDataSource',function(data){
        //获取行数据集合
        const rows = gridModel.getRows();
        //获取动作集合
        const actions = gridModel.getCache('actions');
        const actionsStates = [];
        //动态处理每行动作按钮展示情况
        rows.forEach(data => {
            const actionState = {};
            actions.forEach(action => {
                if (action.cItemName == "btnStop") {

                    if (data.enable == 0 || data.enable == 2) {
                        actionState[action.cItemName] = { visible: false };
                    }
                    else {
                        actionState[action.cItemName] = { visible: true };
                    }
                } else if (action.cItemName == "btnUnstop") {
                    if (data.enable == 1) {
                        actionState[action.cItemName] = { visible: false };
                    }
                    else {
                        actionState[action.cItemName] = { visible: true };
                    }
                }
                else {
                    actionState[action.cItemName] = { visible: true };
                }
            });
            actionsStates.push(actionState);
        });
        gridModel.setActionsState(actionsStates);
    }) 
}

15、获取表格数据方法

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //触发按钮点击事件
  viewModel.get('button5xa').on('click',function(args){
      //获取点击行的行数据(根据行号)
      const rowData = gridModel.getRow(args.index);
      //获取表格当前页面所有的行数据
      const rowAllDatas = gridModel.getRows();
      //获取表格当前页面表体数据(比getRows多了_status字段)
      const tabelDatas = gridModel.getData();
      //获取表格已勾选行的行数据(不使用行号查找)
      const selecteDatas = gridModel.getSelectedRows();
  })
}

16、获取选中行的索引号

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //触发按钮点击事件
  viewModel.get('button5xe').on('click',function(){
      //获取表格已选中的行的索引集合
      const indexArr = gridModel.getSelectedRowIndexes();
      //点击表格行内按钮时,或者触发在任何绑定在列表行上的事件时,获取当前行的index
      const index = gridModel.getFocusedRowIndex();
  })
}

17、取消双击列表行打开卡片页

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //取消双击列表行打开卡片页 通过'forbiddenDblClick'字段来判断 bool类型 默认为false
  gridModel._set_data('forbiddenDblClick',true);
}

18、表格数据为空时,取消表格自动增加一行的功能

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //表格数据为空时,取消表格自动增加一行的功能
  viewModel.getParams().autoAddRow = false;
}

19、控制可编辑行数据列的必输校验

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();

  gridModel.on('afterSetDataSource',function(){
      //控制可编辑行数据列的必输校验 column:列名  bIsNull为true为必输校验
      gridModel.setColumnState(column,'bIsNull',false);
  })
}

20、列表页面数据取消自动查询

function (event) {
  var viewModel = this;
  //列表页面数据取消自动查询  autoLoad  默认为true
  viewModel.getParams().autoLoad = false;
}

21、设置列表页面固定高度

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //设置列表页面固定高度 设置表格fixedHeight属性  取值为number类型 单位:px
  girdModel.setState('fixedHeight',xxx)
}

22、设置列表页面固定列

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //设置列表页面固定列 设置表格列状态bFixed属性
  girdModel.setColumnState('new2','bFixed',true)
}

注意以下方法为卡片页面表格单独支持的操作方法,列表页面表格一般不支持

23、表格增行、插行、删行(一般用于卡片页面子表表格中,列表页面是有BUG的暂不支持)

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //制造批量拆入行时假数据
  const rowDatas=[
      {
        "shouhuoren":"李四",
        "tenant_id":"gkjxg2z2",
        "huowuzhiliangpingji":'客商',
        "huowuzhiliangdengji":"二等",
        "huowuxiangximiaoshu":"货物详情描述test",
        "pubts":"2021-07-28 13:56:51"
      },
      {
        "shouhuoren":"张三",
        "tenant_id":"gkjxg2z2",
        "huowuzhiliangpingji":'客商',
        "huowuzhiliangdengji":"二等",
        "huowuxiangximiaoshu":"货物详情描述test",
        "pubts":"2021-07-28 13:56:51"
      }
  ]
  //制造单行假数据
  const rowData={
        "shouhuoren":"张三",
        "tenant_id":"gkjxg2z2",
        "huowuzhiliangpingji":'客商',
        "huowuzhiliangdengji":"二等",
        "huowuxiangximiaoshu":"货物详情描述test",
        "pubts":"2021-07-28 13:56:51"
  }
  //表格增行操作
  gridModel.appendRow(rowData);
  //表格插行功能(单条数据) 入参:rowIndex:行号  rowData:行数据
  gridModel.insertRow(rowIndex,rowData);  
  //表格批量插入数据 入参:rowIndex:行号  rowDatas:行数据
  gridModel.insertRows(rowIndex,rowDatas);
  //表格删行功能 入参:rowIndexes:行号集合 [0,1]
  gridModel.deleteRows(rowIndexes);
  //表格删除所有行
  gridModel.deleteAllRows();
}

24、控制卡片页面表格不可编辑的方法(表格编辑态和新增态)

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();

  //整个表格不可编辑
  gridModel.setReadOnly(true);
  //控制某个单元格不可编辑   入参: rowIndex:行号  column:列名  
  gridModel.setCellState(rowIndex,column,'readOnly',true);  
  //控制表格某列不可编辑  入参:column:列名  bCanModify:取值true为可修改  fasle为不可修改
  gridModel.selColumnState(column,'bCanModify',false);
  //控制表格某行不可编辑 入参:rowIndexe:行号  disabled:true为启动禁用,false为取消禁用
  gridModel.setRowState(rowIndexe,'disabled',true);
}

25、表格常用其他方法

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //清空表格数据和状态
  gridModel.clear();
  //全选
  gridModel.selectAll();
  //取消全选
  gridModel.unselectAll();
  //设置表格分页条数 number类型
  gridModel.setPageSize(pageSize);
  //获取分页条数
  gridModel.getPageSize();
  //设置分页页码   pageIndex页码  refresh 
  gridModel.setPageIndex(pageIndex, refresh, isMask);
  //获取分页页码
  gridModel.getPageIndex();
}

26、表格自定义列展示(非组件类)

function (event) {
  var viewModel = this;
  var gridModel=viewModel.getGridModel();
  //@params columnName 表格列名 (必填)
  //@params formatter 元数据参数 (固定,必填)
  gridModel.setColumnState('live_url', 'formatter', function(rowInfo, rowData) {
      if(rowData.live_url){
        //自定义展示列
        return {
          //是否重写  true:是 false:否
          override: true,
          //自定义展示的内容
          html:`<a href=${rowData.live_url} target='_blank'>`+ rowData.live_url +`</a>`
        } 
      }
  })
}

27、表格详细方法汇总地址

访问地址:https://www.showdoc.com.cn/89974793848004/511806707024978

三、 表格常用事件汇总

1、beforeCellValueChange 单元格数据改变前事件

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //单元格数据改变前事件
  gridModel.on("beforeCellValueChange", function (event) {
    //rowIndex:'行号', cellName: '列名', value: '新值', oldValue: '旧值'
    let { rowIndex, cellName, value, oldValue, childrenField } = event;
    /*
      to do someing...
    */
    //返回true继续单元格数据改变,返回false终止单元格数据改变
    return true;
  });
}

2、afterCellValueChange 单元格数据改变后事件

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //单元格数据改变后事件
  gridModel.on("afterCellValueChange", function (event) {
    //rowIndex:'行号', cellName: '列名', value: '新值', oldValue: '旧值'
    let { rowIndex, cellName, value, oldValue, childrenField } = event;
    /*
      to do someing...
    */
  });
}

3、beforeSetDataSource 设置表格数据前事件

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //设置表格数据前事件 data为grid数据格式
  gridModel.on("beforeSetDataSource", function (data) {
    /*
      to do someing...
    */
    //返回true为允许设置grid数据,返回false为终止设置数据
    return true;
  });
}

4、afterSetDataSource 设置表格数据后事件

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //设置表格数据后事件  data为grid数据格式
  gridModel.on("afterSetDataSource", function (data) {
    /*
      to do someing...
    */
  });
}

5、beforeSelect 选中select前事件

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //选中select前事件 rowIndexs为行号,单行(整形)or多行(数组)
  gridModel.on("beforeSelect", function (rowIndexs) {
    /*
      to do someing...
    */
    //返回true为允许选中,返回false为终止选中
    return false;
  });
}

6、afterSelect 选中select后事件

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //选中select后事件 rowIndexs为行号,单行(整形)or多行(数组)
  gridModel.on("afterSelect", function (rowIndexs) {
    /*
      to do someing...
    */
  });
}

7、beforeUnselect 取消选中select前事件

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //取消选中select前事件 rowIndexs为行号,单行(整形)or多行(数组)
  gridModel.on("beforeUnselect", function (rowIndexs) {
    /*
      to do someing...
    */
    //返回true为允许取消选中,返回false为终止取消选中
    return true;
  });
}

8、afterUnselect 取消选中select后事件

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //取消选中select后事件 rowIndexs为行号,单行(整形)or多行(数组)
  gridModel.on("afterUnselect", function (rowIndexs) {
    /*
      to do someing...
    */
  });
}

9、beforeSelectAll 表格全选前事件

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //单元格全选前事件
  gridModel.on("beforeSelectAll", function () {
    /*
      to do someing...
    */
    //返回true为允许全选,返回false为终止全选
    return true;
  });
}

10、afterSelectAll 表格全选后事件

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //表格全选后事件  data为选中行的数据
  gridModel.on("afterSelectAll", function (data) {
    /*
      to do someing...
    */
  });
}

11、beforeUnselectAll 表格全选取消前的事件

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //表格全选取消前的事件
  gridModel.on("beforeUnselectAll", function (event) {
    /*
      to do someing...
    */
    //返回true为允许取消全消,返回false为终止取消全消
    return true;
  });
}

12、afterUnselectAll 表格全选取消后的事件

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //表格全选取消后的事件
  gridModel.on("afterUnselectAll", function () {
    /*
      to do someing...
    */
  });
}

13、beforeInsertRow 增行/插行前事件

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //增行/插行前事件
  gridModel.on("beforeInsertRow", function (data) {
    /*
      to do someing...
    */
    //返回true为允许增/插行,返回false为终止操作
    return false;
  });
}

14、afterInsertRow 增行/插行后事件

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //增行/插行后事件 data格式为{ index: '增/插行行号', row: '行数据'}
  gridModel.on("afterInsertRow", function (data) {
    /*
      to do someing...
    */
  });
}

15、beforeDeleteRows 删行前事件

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //删行前事件 data为要删除的行数据
  gridModel.on("beforeDeleteRows", function (data) {
    /*
      to do someing...
    */
    //返回true为允许删行,返回false为终止操作
    return false;
  });
}

16、afterDeleteRows 删行后事件

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //删行后事件 data为已删除的行数据
  gridModel.on("afterDeleteRows", function (data) {
    /*
      to do someing...
    */
  });
}

17、beforeLoad 搜索表格数据之前事件

function (event) {
  var viewModel = this;
  var girdModel = viewModel.getGridModel();
  //搜索表格数据之前,可以修改params参数
  gridModel.on('beforeLoad', function(params){
    //一般主要修改默认查询的过滤条件
    /*
      to do someing...
    */
  })
}

18、表格详细事件汇总地址

访问地址:https://www.showdoc.com.cn/89974793848004/511923336454970

Copyright © 用友 -【生态技术部】 2021 all right reserved,powered by Gitbook修订时间: 2021-12-20 15:07:46

results matching ""

    No results matching ""