Как установить последнюю добавленную строку как выбранную в Slickgrid - PullRequest
0 голосов
/ 28 мая 2020

Я добавляю новую строку в slickgrid следующим образом:

this.dataset.push(
      {
        id: idObjet,
        id_objet: idObjet,
        name: ElementType[elementType] + '-' + idObjet.toString(),
        type: ElementType[elementType],
        delete: 0,
      }
    );

    this.angularGrid.dataView.refresh();

На этом этапе я хочу выделить эту строку. Поэтому я сначала получаю индекс этой строки:

const rowIndex = this.dataView.getIdxById(id);

Затем я пытаюсь установить эту строку как выбранную, используя:

this.slickGrid.setSelectedRows([rowIndex]);

Однако он не выделяет / выбирает последнюю добавленную строку . Эта команда работает с любыми другими существующими строками в сетке.

Это что, поскольку просмотр строк еще не был отрисован, его нельзя выбрать? Есть ли обходной путь?

1 Ответ

1 голос
/ 28 мая 2020

Обратите внимание, что я являюсь автором Angular -Slickgrid

Вы можете использовать метод addItem из Grid Service, он по умолчанию выделит строку. Взгляните на этот Пример , но он не будет выбирать строку по умолчанию, но есть дополнительная опция для этого метода, которую вы можете использовать selectRow: true

Для этого примера, который я упомянул, вот код для этого.

angularGridReady(angularGrid: AngularGridInstance) {
    this.angularGrid = angularGrid;
    this.dataView = angularGrid.dataView;
    this.grid = angularGrid.slickGrid;
    this.gridService = angularGrid.gridService;
}

addNewItem(insertPosition?: 'top' | 'bottom') {
    const newId = this.dataset.length;
    const randomYear = 2000 + Math.floor(Math.random() * 10);
    const randomMonth = Math.floor(Math.random() * 11);
    const randomDay = Math.floor((Math.random() * 29));
    const randomPercent = Math.round(Math.random() * 100);

    const newItem = {
      id: newId,
      title: 'Task ' + newId,
      duration: Math.round(Math.random() * 100) + '',
      percentComplete: randomPercent,
      percentCompleteNumber: randomPercent,
      start: new Date(randomYear, randomMonth, randomDay),
      finish: new Date(randomYear, (randomMonth + 2), randomDay),
      effortDriven: true
    };
    this.angularGrid.gridService.addItem(newItem, { position: insertPosition, selectRow: true });
  }

Обратите внимание, что addItem поддерживает только позицию top или bottom (которая в основном будет вставляться в первую или последнюю строку в сетке).

Если вы действительно хотите sh вставить строку по указанному c индексу в сетке, тогда вам нужно будет посмотреть, как я реализовал этот addItem метод здесь . Все методы в грид-службе в основном являются вспомогательными методами, все они используют методы SlickGrid и DataView для окончательного выполнения. Также обратите внимание, что с выделением немного сложнее справиться, вам нужно использовать SlickGrid MetaData для изменения CSS классов (добавить / удалить css класс на секунду) в этой строке, чтобы имитировать выделение, чтобы это еще одна причина просто использовать грид-сервис.

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