Angular ui grid - specific class for unselectable row

笑着哭i 提交于 2019-12-08 03:30:07

问题


I use angular ui-grid to display my data.

I enabled the option to select row in gridOptions:

enableRowSelection: true,

But for specific rows I disable the selection by this code:

$scope.mygrid.isRowSelectable = function (row) {
    if (row.entity.id == 2) {
        return false;
    } else {
        return true;
    }
};

This is work, I cant select row with id =2,

But I want to add class for this row to notify that it is unselectable.

Any idea?


回答1:


To Highlight the actual row:

You can write your own rowTemplate and assign the class to the row based on the entity id something like this,

 var rowTemplate =  '<div>' +
                 '  <div ng-class="{ \'red\': row.entity.company==\'Enersol\' }" ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name" class="ui-grid-cell" ng-class="{ \'ui-grid-row-header-cell\': col.isRowHeader }"  ui-grid-cell></div>' +
                 '</div>';
  $scope.gridOptions = {
    rowTemplate:rowTemplate,
    enableSorting: true,
    columnDefs: [
      { field: 'name'},
      { field: 'company'}
    ]
  };

Instead of the row.entity.company=\'Enersol\' you can change it to row.entity.id and assign the class name.

In this example the the 'red' gives background color of yellow and foreground color of red.

Take a look at this plnkr. http://plnkr.co/edit/vaqBY235Lfz7WLvy0FCc?p=preview

To modify the actual row header icons:

You can override the template for the selection row header buttons and add custom class css. Inject templateCache in your controller and override the template like this.

$templateCache.put('ui-grid/selectionRowHeaderButtons',
    "<div class=\"ui-grid-selection-row-header-buttons\" ng-class=\"{'ui-grid-row-selected': row.isSelected , 'ui-grid-icon-cancel':!grid.appScope.isSelectable(row.entity), 'ui-grid-icon-ok':grid.appScope.isSelectable(row.entity)}\" ng-click=\"selectButtonClick(row, $event)\">&nbsp;</div>"
  );

The template uses a method in your controller scope to identify whether the row is selectable.

Sample plnkr here http://plnkr.co/edit/vaqBY235Lfz7WLvy0FCc?p=preview




回答2:


In the columnDefs you can add a cellClass.

function applyClass(grid, row, col, rowRenderIndex, colRenderIndex) {
    if (row.entity.IsMapped) {
        return 'disabledRow';
    }
}

$scope.yourGrid = {
    columnDefs: [
        { cellClass: applyClass }
    ]
};


来源:https://stackoverflow.com/questions/30567591/angular-ui-grid-specific-class-for-unselectable-row

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!