Багаторівневе групування 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);

суть до користувацьких плагінів, занадто довга для включення сюди Конкретно, якщо ви подивитеся на рядок 57із slick.checkboxselectionmodel:

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

groupRowIndex ніколи не вирішується для прихованих рядків і тому ніколи не вибирається. Я намагався розгорнути групу при натисканні, а потім вирішити рядки, що працює, але коли група згортається згодом, у сітці вибираються неправильні рядки.

будь-яка допомога буде дуже вдячна!

деякі примітки:


2
я якнайшвидше покладу товстун
Жульєн

1
Для цього існує випуск № 165 , і я думаю, що може допомогти вам у тому, щоб ви чи хтось інший просто налагодив цю проблему у вилці 6pac. Це проект із відкритим кодом із внесками громади, тому будь-які внески допомагають покращити цю проблему протягом багатьох років.
ghiscoding

Відповіді:


1

суть до оновлених плагінів

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

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

головне рішення моєї проблеми полягало в розширенні всіх збірних груп під час вибору / зняття виділень на рівні групи, виконання будь-яких процедур вибору / скасування вибору, а потім згортання будь-яких раніше розширених груп

Редагувати:

Це не вдається, коли в сітці є велика кількість даних (10 к рядків). Повторне відкриття з щедротою.

Схоже, хіба про те, що потрібно розширювати та згортати стільки груп, що викликають проблеми.


1
@AmerllicA ця відповідь була передчасною і не працює з великими наборами даних
Жульєн

1
@AmerllicA Це не тільки неетично порадувати цього за якусь щедрість, але насправді ОП розпочала щедрість після опублікування цієї відповіді, і це тому, що в ОП не було результатів, яких він хотів отримати з цією відповіддю. Тож, будь ласка, перестаньте просити такого жебрацтва за виграш, який ви не заробили, і натомість спробуйте допомогти ОП у його проблемі, якщо у вас є час, щоб придумати гарне / краще рішення.
Крістос Літрас

@ChristosLytras, я негайно видалю свій коментар, дякую за підказку.
AmerllicA

@ChristosLytras подумав те саме, не міг сказати цього краще
Іслам Елшобокші
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.