Я хочу, чтобы slickgrid автоматически сортировал столбцы на основе самого широкого содержимого или текста заголовка - в зависимости от того, что больше. Проще говоря, я хочу, чтобы он моделировал поведение стандартных таблиц HTML по умолчанию, когда дело доходило до размера столбцов. Как это сделать в slickgrid?
Как авторизовать столбец в SlickGrid?
Ответ 1
При построении своих опций вы можете использовать forceFitColumns: true
var options = {
enableCellNavigation: true,
forceFitColumns: true
};
Это заставит столбцы заполнить всю ширину вашего разделителя сетки.
Ответ 2
OP ищет столбцы для роста, чтобы соответствовать их контенту. grid.autosizeColumns()
вырабатывает ячейки в соответствии с родительским контейнером, что не то же самое.
Я добавил эту функцию, и это примерно так, как вы можете себе представить. Вы просматриваете отображаемые ячейки и измеряете их, сохраняя самую большую ячейку и используя эту ширину, чтобы задать ширину столбца. SlickGrid дает вам хороший доступ к ячейкам в окне просмотра, поэтому это прекрасно работает.
Алгоритм измерения - ваше большое решение. Вы можете поместить контент с экрана и измерить его, как предлагает @jay. Это работает, но это самый медленный метод, так как он требует перерисовки для вставки и перерисовки при удалении. Могут быть способы оптимизации. Решение, с которым я столкнулся, - это измерение ширины каждой буквы в алфавите, а также других символов, с которыми мы сталкиваемся, и суммирование их для создания ширины. Да, это звучит абсурдно. У него много ограничений: размер шрифта должен быть одинаковым, он не поддерживает образы, не может быть никаких строк и т.д. Однако, если вы можете жить с ограничениями, вы можете рассчитать размеры для огромного видового экрана сетки в <5ms
, потому что ширина символов измеряется только один раз.
После того, как вы получите размеры столбцов, вы назначаете их столбцам с помощью grid.setColumns()
.
Ответ 3
Я добавил это после того, как сетка нарисована, и она отлично работает.
$(window).resize(function() {
var cols = grid.getColumns();
grid.setColumns(cols);
})
Ответ 4
Slickgrid не будет поддерживать автоматический размер столбца на основе данных. Вам нужно написать плагин или переделать ядро slickgrid для изменения.
Вот ссылка, которую я создал плагин для работы с автоматическим размером slickgrid https://github.com/naresh-n/slickgrid-column-data-autosize
Ответ 5
Вы должны иметь возможность вызвать метод autosizeColumns()
объекта сетки.
grid.autosizeColumns();
Ответ 6
Сделайте эту простую настройку для Naresh https://github.com/naresh-n/slickgrid-column-data-autosize в функции init
:
- Добавить
$container.ready(resizeAllColumns);
в функцию init.
Это гарантирует автоматическое определение столбцов при начальной загрузке
Ответ 7
Вставьте текст в элемент вне экрана и извлеките ширину элемента. Это то, что делает excanvas для измерения текста. Используйте это, чтобы задать ширину столбца, так как он ожидает значение пикселя.