Любой из параметров сетки, начинающийся с префикса 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 объекты вики. Я написал много вики, и на ваш вопрос, на самом деле, есть еще один ответ: Выбор строки Вики.