agGrid设置对指定行不能选中checkbox

官方文档以下描述:
界面:
方法一:(只控制点击checkbox时不能选择,可是出了一个bug,若有遇到的伙伴望可以交流一下解决方案。 设置某些行不可进行行选择时,这个方法对全选框也起了做用,致使一、全选时全选checkbox没有选中图标,二、反选也就是取消全部选择失效)

解决办法(方法二):2019-3-25补充:本身写判断有太多状况须要判断,并且很差找判断条件,因此最后解决步骤:(换了一个方法解决)
一、 不可选的行不渲染checkbox,这里说明:即便没有渲染checkbox框,其实该行仍然能够被选中(好比选中后的颜色会被加上)用的方法是:

checkboxSelection:(params)=>{
    let field=params.data;
    this.actions.getNotSelectAndRowId(params);//获取不可选行的索引和id
    return params.data?!options.includes(field.f8)&&!options.includes(field.f11):false;
}
复制代码

// 获取冲突行的_id和rowid
getNotSelectAndRowId:function(params){
    let options=['是','是(请假)'];
    let field=params.data;
    let id = field._id;
    //获取全部冲突行的_id /行ID  options.includes(field.f7)||
    if (options.includes(field.f8)||options.includes(field.f11)) {
        !this.data.notSelectData.includes(id)&& this.data.notSelectData.push(id)
        if (params.node) !this.data.notSelectRowId.includes(params.node.id)&&this.data.notSelectRowId.push(params.node.id)
        else if (params.id) !this.data.notSelectRowId.includes(params.id)&&this.data.notSelectRowId.push(params.id)
    }
},
复制代码

二、从api里获取全部选中的行,而后根据条件筛选不可选的,把这些行存起来,行索引和每行的惟一识别的好比id(有时候id多是索引,要区别开)

方法:api.getSelectedRows()
复制代码

let rows = this.agGrid.gridOptions.api.getSelectedRows();
//去掉rows中冲突的行数据
if ((this.data.viewMode== "viewFromCorrespondence"||this.data.viewMode=='editFromCorrespondence') &&this.data.parentTableId== "8174_vZhJu4jY8yfZpVTjkmsrhF") {
    for (let r = 0; r < rows.length; r++) {
        for (let j = 0; j < this.data.notSelectData.length; j++) {
            if (rows[r]&&rows[r]._id == this.data.notSelectData[j]) {
                rows.splice(r, 1)
            }
        }
    }
    this.actions.removeNotSelectDataColor()
}
复制代码

三、第一个:判断单行点击,单击某个单元格屡次可能会选中改行第二个:点击全选,其实点击全选仍是选中的所有数据,这时候经过以前拿到的每行的id的数组,把不可选的行从getSelectedRows()这去除掉,这样保存下来的数据里就不会存在不可选的行数据此外,由于全选会给全部行加上选中的颜色,这里须要经过行索引的数组把颜色去掉复制代码

//移除冲突行的选中颜色
  removeNotSelectDataColor:function(){
console.log('this.data.isSaveSelectData',localStorage.getItem('isSaveSelectData'),localStorage.getItem('isSaveSelectData')=='false',typeof localStorage.getItem('isSaveSelectData'))
      //若是刚刚保存的排期单对应关系数据,就返回不取消颜色
      if (localStorage.getItem('isSaveSelectData')!='false'){
          return;
      }
      for(let i=0;i<$('.ag-row').length;i++){
          let rowId = $('.ag-row')[i].getAttribute('row');
          //let className = $('.ag-row')[i].className;
          if (this.data.notSelectRowId.includes(rowId)){
              $($('.ag-row')[i]).removeClass('ag-row-selected')
          }
      }
  },
复制代码

总结:这个方法其实就是障眼法,页面看着没选中,实际上是选中状态的,只是人为的把选中颜色取消了,把checkbox取消了,把不可选的行数据直接从全部数据里删掉了,这样保存和全选反选就没问题了
遇到一个bug:滚动可能以前没有颜色的不可选的行颜色会被再次加上,这个把去掉颜色 的方法在滚动事件里在执行一次就ok复制代码

this.el.find('.ag-body-viewport').on('scroll', _.debounce((e) => {
    That.actions.setFloatingFilterInput();
    //解决agGrid滚动冲突行颜色问题
    this.actions.removeNotSelectDataColor();
}, 700));
复制代码

其余问题针对不一样的状况而定,愿你们写代码写的开心
相关文章
相关标签/搜索