【问题标题】:ag-grid checkbox column checked by renderer渲染器检查的 ag-grid 复选框列
【发布时间】:2019-01-25 00:59:55
【问题描述】:

我正在使用带有复选框标题组件的 ag-grid 来允许选择/取消选择所有行。现在,当我获取网格数据时,我想根据某些字段值选中/取消选中复选框列。我尝试了一个渲染器,但它不适用于下面的代码。如果我从列定义中删除“checkboxSelection”,它会完美运行。

  this.gridClientOptions = {
  enableFilter: true,
  enableSorting: true,
  enableColResize: true,
  pagination: true,
  paginationPageSize: 5,
  rowSelection: 'multiple',
  suppressRowClickSelection: true,
  columnDefs: [
      {
        headerName: '',
        width: 40,
        headerCheckboxSelection: true,
        headerCheckboxSelectionFilteredOnly: true,
        checkboxSelection: true,
        cellRenderer: 'selectedClient'
    },
    {headerName: 'Client Code', field: 'clientCode'},
    {headerName: 'Client Name', field: 'clientName'},
    {headerName: 'Group Name', field: 'groupName'},
  ],
  components: {
    'selectedClient': this.selectedClient
  },
  getRowStyle: function(params) {
    if (params.node.rowIndex % 2 === 0) {
        return { background: '#dfffdf' }
    }
  }      
}

selectedClient(params) {
return params.data.assignmentId > 0 ? `<input type='checkbox' checked>` : `<input type='checkbox'>`;
  }

【问题讨论】:

    标签: angular ag-grid


    【解决方案1】:

    我在https://embed.plnkr.co/awEnTpOLOuXDereXrYi0/ 为您构建了一个成功可行的项目。

    正如您在下面看到的,我删除了 headerCheckboxSelection、headerCheckboxSelectionFilteredOnly 和 checkboxSelection,并让 cellRenderer 内联实现而不是 selectedClient,所有这些都很好。

    var data = [
      {'clientCode':1,'clientName':'client1', 'groupName' : 'groupA', 'assignmentId':1},
      {'clientCode':2,'clientName':'client2', 'groupName' : 'groupA', 'assignmentId':0},
      {'clientCode':3,'clientName':'client3', 'groupName' : 'groupA', 'assignmentId':1},
      ];
    
    var gridOption = {
      enableFilter: true,
      enableSorting: true,
      enableColResize: true,
      pagination: true,
      paginationPageSize: 5,
      rowSelection: 'multiple',
      suppressRowClickSelection: true,
      rowData: data,
      columnDefs: [
          {
            headerName: '',
            width: 40,
            editable: true,
            cellRenderer: params => {
              return `<input type='checkbox' ${params.value ? 'checked' : ''} />`;
            },
            field: 'assignmentId'
        },
        {headerName: 'Client Code', field: 'clientCode'},
        {headerName: 'Client Name', field: 'clientName'},
        {headerName: 'Group Name', field: 'groupName'},
      ],
      getRowStyle: function(params) {
        if (params.node.rowIndex % 2 === 0) {
            return { background: '#dfffdf' }
        }
      }      
    };
    
    
    var mygrid = new agGrid.Grid(document.querySelector('#myGrid'),gridOption);
    

    如果您想要一个标题选择,并且在加载数据时选择所有过滤的行,请使用以下源。实际上我已经为我要过滤的行添加了一个 RowDataChange 侦听器 setSelected(true) (assignmentId > 0):

    var data = [
      {'clientCode':1,'clientName':'client1', 'groupName' : 'groupA', 'assignmentId':1},
      {'clientCode':2,'clientName':'client2', 'groupName' : 'groupA', 'assignmentId':0},
      {'clientCode':3,'clientName':'client3', 'groupName' : 'groupA', 'assignmentId':1},
      ];
    
    var gridOption = {
      enableFilter: true,
      enableSorting: true,
      enableColResize: true,
      pagination: true,
      paginationPageSize: 5,
      rowSelection: 'multiple',
      suppressRowClickSelection: true,
      rowData: data,
      columnDefs: [
          {
            headerName: '',
            width: 40,
            editable: true,
            headerCheckboxSelection: true,
            headerCheckboxSelectionFilteredOnly: false,        
            checkboxSelection: true,
        },
        {headerName: 'Client Code', field: 'clientCode'},
        {headerName: 'Client Name', field: 'clientName'},
        {headerName: 'Group Name', field: 'groupName'},
      ],
      getRowStyle: function(params) {
        if (params.node.rowIndex % 2 === 0) {
            return { background: '#dfffdf' }
        }
      },
      onRowDataChanged: event => {
        event.api.forEachNode( function(rowNode, index) {
          if(rowNode.data.assignmentId > 0)
            rowNode.setSelected(true);
        });
      } 
    };
    this.isRowSelectable = function(rowNode) {
          return rowNode.data ? rowNode.data.year < 2007 : false;
        };
    
    var mygrid = new agGrid.Grid(document.querySelector('#myGrid'),gridOption);
    

    新源的输出:

    【讨论】:

    • 是的,这很好,但我也想保留标题复选框以一次性选择/取消选择所有行。您是否也可以添加标题复选框?
    • 我确实用新的源代码更新了答案。我希望你会。
    猜你喜欢
    • 2019-04-20
    • 2018-12-31
    • 2018-08-10
    • 2018-09-30
    • 1970-01-01
    • 2021-06-07
    • 2021-12-08
    • 2021-11-09
    • 2019-01-13
    相关资源
    最近更新 更多