хотите изменить gridoption preselectedRows строку в angular slickgrid динамически при нажатии кнопки (проверка функции); - PullRequest
0 голосов
/ 07 января 2020

при нажатии кнопки некоторые строки secifi c выбираются с использованием предварительно выбранной опции сетки в angular slickgrid, но если я это сделаю, предварительно выбранная опция gridoption будет изменена, но она не будет отображаться. Пожалуйста, помогите мне

TS файл

 arr1 = [1,2,8];    
 arr =[];

ngOnInit() {   
    this.onPageLoad();   
   this.dataset = [];   
  }  
 onPageLoad(){    
    this.gridOptions = {    
      enableAutoResize: true,       // true by default    
      enableCellNavigation: true,    
      enableFiltering: true,        
      editable: true,    
      rowSelectionOptions: {    
        selectActiveRow: false,    
      },    
      preselectedRows:this.arr,    
      enableCheckboxSelector: true,    
      enableRowSelection: true,   
      };   
  }      
check(){    
   this.gridOptions.preselectedRows =this.arr;    
 }        

1 Ответ

0 голосов
/ 08 января 2020

Любой из параметров сетки, начинающийся с префикса pre (presets, preselectedRows, ...), должен использоваться только при построении сетки (при загрузке первой страницы). Для динамического изменения выбора строк вам нужно будет использовать другие функции SlickGrid, есть два способа сделать это, и оба они очень похожи.

Также в качестве напоминания, Angular -Slickgrid - это оболочка над SlickGrid, которая является основной библиотекой, и для выбора некоторых строк вам нужно вызвать метод из базовой библиотеки.

Сначала вам нужно получить AngularGridInstance, и оттуда вы можете вызвать метод setSelectedRows из GridService (который предоставляет некоторые методы SlickGrid) или использовать его непосредственно из основная библиотека SlickGrid.

<!-- Component View -->
<angular-slickgrid 
  gridId="grid4" 
  [columnDefinitions]="columnDefinitions" 
  [gridOptions]="gridOptions"
  [dataset]="dataset" 
  (onAngularGridCreated)="angularGridReady($event)"> <!-- <<== you need this line !-->
</angular-slickgrid>
// Component
export class MyComponent {
  angularGrid: AngularGridInstance;
  columnDefinitions: Column[];
  gridOptions: GridOption;
  dataset: any[];

  // as the name suggest, this instance will be available 
  // once the grid finished rendering and is ready
  angularGridReady(angularGrid: AngularGridInstance) {
    this.angularGrid = angularGrid;
  }

  changeSelectionDynamically(rowIds: number[]) {
    if (this.angularGrid) {
      // you can call the method from the GridService
      // I prefer to use this because it has the Types (TypeScript)
      angularGrid.gridService.setSelectedRows(rowIndexes);

      // OR call the method from the SlickGrid object (core lib instance)
      angularGrid.slickGrid.setSelectedRows(rowIndexes);
    }
  }

Так что из показанного примера, какой выбрать? Это действительно зависит от вас, вы можете использовать один или другой, и результат будет таким же. Единственная причина, по которой я скопировал некоторые методы в GridService, заключается в том, что Angular-Slickgrid написан на TypeScript, и поэтому у нас есть проверки типа, в то время как SlickGrid (базовая библиотека) написана простым JavaScript и это не буду жаловаться, если вы допустили ошибку.

Наконец, если вы хотите очистить выборки перед вызовом нового набора выборок sh, вы можете сделать это, вызвав пустой массив, как показано ниже. Вы должны сделать это, если у вас был какой-либо выбор до вашего нового выбора.

angularGrid.slickGrid.setSelectedRows([]);     // first clear the selection
angularGrid.slickGrid.setSelectedRows(rowIndexes); // then set a new selection

РЕДАКТИРОВАТЬ

Динамическое выделение всех строк не может быть выполнено в 1 исполнении, так как плагин выбора строк не ' У меня нет никаких способов сделать это. Однако, вероятно, будет работать получение идентификаторов всех ваших строк (через map) из DataView.

// actually this won't work since setSelectedRows() is grid row indexed
// so item IDs won't work, so don't use this
const allRowIds = angularGrid.dataView.getItems().map(item => item.id);
angularGrid.slickGrid.setSelectedRows(allRowIds);

NOTE

Это на самом деле не будет работать, я только что вспомнил, что setSelectedRows использует индексы строк сетки, а не идентификаторы элементов. Однако, что вы можете сделать, это получить длину dataset и заполнить массив индексами этих тезисов.

const allRowIndexes = Array.from(Array(this.dataset.length).keys());
angularGrid.slickGrid.setSelectedRows(allRowIndexes);

Также обратите внимание, что я являюсь автором Angular -Slickgrid , и для получения дополнительной информации об этом ответе вы можете прочитать эти SlickGrid & DataView объекты вики. Я написал много вики, и на ваш вопрос, на самом деле, есть еще один ответ: Выбор строки Вики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...