Slickgrid получить данные из невидимых выбранных строк
Когда фильтр применяется к выбранным строкам, скрытые выделенные строки не получают с помощью getSelectedrows(). Он возвращает только выбранные строки, которые являются видимыми. Поиск не может получить одну. Нужны данные выбранных строк, которые являются видимыми и невидимыми.
Заранее спасибо.!
1 ответ
Посмотрите здесь: https://github.com/6pac/SlickGrid/wiki/DataView
Цитата:
Один из наиболее распространенных вопросов о DataView - как синхронизировать состояние CSS выбора или стиля ячейки при изменениях DataView. Допустим, пользователь выбрал строку. Если затем они изменяют фильтр в DataView, чтобы скрыть некоторые элементы, сетка получает вызов для аннулирования всех измененных строк, включая выбранную, но она не знает, что элемент, который там отображался, перемещен куда-то еще. Что нам нужно сделать, это сохранить идентификаторы выбранных элементов и обновлять выборку в сетке каждый раз, когда изменяется DataView.
К счастью, в DataView есть вспомогательный метод, который может позаботиться об этом:
syncGridSelection(grid, preserveHidden)
- Синхронизирует выбранные строки сетки с DataView, подписавшись на событие onSelectedRowsChanged сетки, а также на события onRowsChanged и onRowCountChanged объекта DataView. Если preserveHidden имеет значение true, он будет сохранять выбранные элементы, даже если они не отображаются в виде строк. Например, если вы выбираете элемент, измените фильтр DataView, чтобы этот элемент больше не отображался в сетке, а затем измените его обратно, элемент останется выбранным. Если preserveHidden имеет значение false, все выбранные элементы, которые не могут быть сопоставлены со строками, удаляются. Реализация действительно проста, и я включу ее здесь для справки:
function syncGridSelection(grid, preserveHidden) {
var self = this;
var selectedRowIds = self.mapRowsToIds(grid.getSelectedRows());;
var inHandler;
function update() {
if (selectedRowIds.length > 0) {
inHandler = true;
var selectedRows = self.mapIdsToRows(selectedRowIds);
if (!preserveHidden) {
selectedRowIds = self.mapRowsToIds(selectedRows);
}
grid.setSelectedRows(selectedRows);
inHandler = false;
}
}
grid.onSelectedRowsChanged.subscribe(function(e, args) {
if (inHandler) { return; }
selectedRowIds = self.mapRowsToIds(grid.getSelectedRows());
});
this.onRowsChanged.subscribe(update);
this.onRowCountChanged.subscribe(update);
}