Многоуровневая группировка SlickGrid с выбором уровня группы

10

текущий статус сетки

Я реализовал гладкую сетку с пользовательской моделью выбора, а также с плагином выбора. Я также добавил флажки уровня группы, чтобы позволить переключение выбора на верхнем уровне. Одно из моих требований заключается в том, что свернутые группировки по-прежнему можно выбирать с помощью любых флажков группировки родительского уровня.

Кажется, мой камень преткновения заключается в том, что я не могу понять, как выбирать строки, которые в данный момент не видны в группе. Гладкая сетка поддерживает набор визуально выбранных элементов, в то время как представление данных сеток поддерживает полный набор выбранных элементов, видимых или нет. Однако я не могу понять, как передать данные, установив флажок группы для свернутой строки.

Я настраиваю свою сетку так:

let checkboxSelectionModel = new Slick.CheckboxSelectionModel();
this.grid.setSelectionModel(checkboxSelectionModel);

this.grid.registerPlugin(new Slick.Data.GroupItemMetadataProvider());

let onSelectedRowIdsChanged = this.dataProvider.syncGridSelection(this.grid, true, true);

onSelectedRowIdsChanged.subscribe(
  function(e: any, args: any)
    {
      //business logic stuff                    
    }
  );

let groupedCheckboxSelector = new Slick.GroupedCheckboxSelectColumn({
  cssClass: "slick-cell-checkboxsel",
  onSelectedRowIdsChangedHandler: onSelectedRowIdsChanged
});

let columns = this.grid.getColumns();
columns.unshift(groupedCheckboxSelector.getColumnDefinition());
this.grid.setColumns(columns);

this.grid.registerPlugin(groupedCheckboxSelector);

GIST пользовательских плагинов, слишком долго , чтобы включить сюда В частности, если вы посмотрите на линию 57из slick.checkboxselectionmodel:

$.each(dataItem.rows, function(index, groupRow) {
  var groupRowIndex = _self._grid.getData().getRowById(groupRow.id);
    if (groupRowIndex) {
      selection.push(groupRowIndex);
    }
});

groupRowIndex никогда не разрешается для скрытых строк и поэтому никогда не выбирается. Я попытался развернуть группу при нажатии, затем разрешить строки, что работает, но когда группа свернута впоследствии, в сетке выбираются неправильные строки.

любая помощь будет принята с благодарностью!

некоторые заметки:

Julien
источник
2
я соберу жирную награду как можно скорее
Жюльен
1
Для этого есть открытая проблема № 165 , и я думаю, что вам поможет то, что вы или кто-то еще просто исправите эту проблему в форке 6pac. Это проект с открытым исходным кодом при участии сообщества, поэтому любой вклад поможет улучшить эту библиотеку с годами.
ghiscoding

Ответы:

1

Суть обновленных плагинов

Я уверен, что функциональное решение может направить любого, кто ищет подобное поведение на правильный путь, однако я не уверен, насколько хорошо каждый из этих плагинов будет работать независимо. одно из моих требований состояло в том, чтобы разрешить выбор строки только через флажок строки.

Один недостаток (который, я уверен, легко улучшается) состоит в том, что флажок уровня группы все еще должен быть определен в вашем операторе формата группы

Основное решение моей проблемы состояло в том, чтобы развернуть все свернутые группы при выполнении выбора / отмены выбора на уровне группы, выполнить любые процедуры выбора / отмены выбора, а затем свернуть все ранее развернутые группы

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

Это терпит неудачу, когда сетка имеет большие объемы данных (10 тыс. Строк). Повторное открытие с наградой.

Похоже на то, что производительность приходится увеличивать и сворачивать, поэтому многие группы вызывают проблемы.

Julien
источник
1
@AmerllicA этот ответ был преждевременным и не работает с большими наборами данных
Julien
1
@AmerllicA Это не только неэтично, когда вам нравятся такие награды, но на самом деле ОП начал награду после публикации этого ответа, и это потому, что у ОП не было результатов, которые он хотел получить с этим ответом. Поэтому, пожалуйста, перестаньте так просить о награде, которую вы не заработали, и вместо этого попытайтесь помочь ОП с его проблемой, если у вас есть время найти хорошее / лучшее решение.
Христос Литрас
@ChristosLytras, я немедленно удалю свой комментарий, спасибо за подсказку.
AmerllicA
@ChristosLytras думал то же самое, не мог бы сказать это лучше
Ислам Эльшобокший