SlickGrid DataView syncGridSelection не удаляет старый выбор при изменении таблицы - PullRequest
0 голосов
/ 08 января 2019

У меня SlickGrid работает с dataView, и я использую rowSelectionModel с опцией multiSelect=false. Когда я выбираю что-то в сетке, а затем расширяю свою сетку, нажимая кнопку, чтобы показать некоторые скрытые строки, выделение перемещается правильно, но старое выделение все еще остается в старом ряду.

Это то, что я имею до сих пор:

var dataView = new Slick.Data.DataView({inlineFilters: false});
var grid = new Slick.Grid(gridDiv, dataView, columns, options);
grid.setSelectionModel(new Slick.RowSelectionModel({selectActiveRow: true}));
grid.setSelectedRows([]); //make sure the selection is empty
dataView.onRowsChanged.subscribe(function (e, args) {
    grid.invalidate();
});
dataView.beginUpdate();
dataView.setItems(data);
dataView.setFilter(displayFilter);
dataView.endUpdate();
dataView.syncGridSelection(grid);
grid.render();

Вот несколько скриншотов о поведении:

Перед расширением:

screenshot of table before expanding

Ожидаемое поведение после расширения:

screenshot of expected behavior after expanding

Фактическое поведение после расширения:

screenshot of actual behavior after expanding

Я почти уверен, что я близко, но я не могу понять, что я делаю неправильно.

Заранее спасибо, что нашли время помочь мне с этим:)

РЕДАКТИРОВАТЬ: Я мог бы что-то нашел. Я использую syncGridSelection, который устанавливает некоторые события, но перезаписать их позже. События, которые я перезаписываю dataView.onRowCountChanged() dataView.onRowsChanged() grid.onSelectedRowsChanged

это может быть проблема здесь? Мне нужно, чтобы эти события работали. grid.onSelectedRowsChanged используется для передачи выбранного элемента на график, поэтому он также необходим.

РЕДАКТИРОВАТЬ 2: Мне удалось воспроизвести проблему с примером 5, модифицированный код можно найти в этой пасте Действия по воспроизведению: 1. Выберите пункт 10 2. Свернуть предмет 7

1 Ответ

0 голосов
/ 18 февраля 2019

Посмотрев на код, я думаю, что на самом деле работает . Просто ваши CSS-изменения скрыли одну точку.

Имеются выбранные строки и активные строки. Это разные вещи. Вы установили CSS для обоих (в области CSS на самой странице), чтобы они выглядели одинаково. Таким образом, похоже, что выделение все еще там, хотя на самом деле оно было удалено, но эта строка теперь активна.

Просто удалите два правила CSS и посмотрите.

Для дополнительных очков используйте:

dataView.syncGridSelection(grid, true);

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

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