Я хотел бы предоставить переменную высоту строки в зависимости от размера содержимого. возможно ли это в Slickgrid?
Можете ли вы указать мне на какие-либо примеры?
Я хотел бы предоставить переменную высоту строки в зависимости от размера содержимого. возможно ли это в Slickgrid?
Можете ли вы указать мне на какие-либо примеры?
Это возможно, но это не тривиально, и вы, вероятно, возьмете штраф за производительность. Как работает SlickGrid, он должен быстро ответить на следующие два вопроса:
Когда вы используете статическую высоту строки, ответы на эти вопросы тривиальны; однако с динамической высотой строки вам нужно будет поддерживать несколько дополнительных структур данных.
Здесь примерно то, что я изменил в Slick.Grid.js
Чтобы сделать это практичным (исполнителем), вам также понадобится кеш смещений строк (кеш сумм размера строки). Это позволит быстро вычислить первый вопрос и позволит двоичному поиску ответить на второй.
Я надеюсь, что это поможет.
Я реализовал это в своем проекте с помощью @Stephen Robinson здесь.
Если кому-то интересно, они могут проверить:
https://github.com/vihari/Seaview/blob/version3.0/SlickGrid-master/slick.grid.js.
Его можно включить с помощью файла выше, если вы установите для параметра options.enableWrap значение true.
Спасибо.
Я знаю, что это не отвечает сути вопроса, но решило сейчас простое решение, которое сейчас минимально и отвечает моим требованиям на данный момент. Таким образом, это на всякий случай, если другие ищут простое решение.
Я начал с поля ввода, где изменение значения изменило бы размер строки. Однако теперь я решил использовать слайдер. На самом деле, поскольку у меня есть такие маленькие данные в моей сетке (гарантированные небольшие объемы данных и очень мало строк), я динамически изменяю размер сетки по мере слайдера слайдера. Теперь я знаю, что многие скажут, что это ужасная идея, потому что она может быть ужасно медленной, но опять же, я использую очень маленький объем данных.
Ключом является то, что я снова создаю сетку с новым значением rowHeight, установленным в параметрах.
Добавьте код для обработки слайдера и воссоздания сетки (в качестве альтернативы вы можете переместить то, что у меня есть в функции "слайд", к функции "стоп", если вы не хотите перерисовывать на каждом скользящем тике ):
$j( "#resizeRowSlider" ).slider({
range:"min"
, min: 50
, max: 200
, value: 50
, create: function( even, ui ) {
$j("rowResizeValue").html( "50" );
}
, slide: function( event, ui ) {
$j( "rowResizeValue" ).html( ui.value );
options.rowHeight = ui.value;
// I do a manual resize; you could use autoHeight:true in grid options
resizeGrid();
grid = new Slick.Grid("#" + gridElemId, json, columns , options);
grid.setSelectionModel(new Slick.RowSelectionModel() );
refreshGrid(); // Handle invalidate, resizeCanvas
}
, stop: function( event, ui ) {
}
});
Кроме того, я должен отметить, что это не для каждой строки, но опять же, это соответствует моим потребностям сейчас. Это не идеально, но он работает. Кроме того, если вам действительно нужно отображать сетку в первый раз без переполнения, вы можете создать скрытый div всякий раз, когда вы получите текст, о котором идет речь, и добавьте display:table-cell
, затем получите высоту div и установите это значение для параметров сетки для rowHeight, Затем создайте (или воссоздайте) сетку.
Обычный и простой, это не поддерживается в SlickGrid и, вероятно, никогда не будет. К сожалению.
Существует также реализация переменной высоты JLynch7 на github:
https://github.com/JLynch7/SlickGrid/tree/variableRowHeight
Насколько я понимаю, высота задается пользователем, а не автоматически вычисляется на основе содержимого ячеек строк (я смотрел только пример/example-variable-row-height-dataview.html)
Недавно я разветкил SlickGrid, чтобы добавить кучу новых функций, включая переменные (и изменяемые по размеру) строки. Вы можете попробовать его здесь: https://github.com/globexdesigns/doby-grid
В качестве краткого изложения приведенных выше вариантов никто из них не является официальным, поддерживаемым и готовым к производству. Даже опция разрезающей решетки (более поддерживаемая) по-прежнему отображается как не готовая к производству.
Заметьте, существуют также различия между:
Удивительно, но со всеми вышеперечисленными вариантами SlickGrid (и многими другими библиотеками DataGrid) вы можете получить один или два из указанных выше, но не все три.
Если вы не так обеспокоены официальным, поддерживаемым и готовым продуктом, то это мои впечатления от тестирования трех вариантов SlickGrid, перечисленных выше:
Вид на море
JLynch7
Доби сетки
В решение Vihari Piratla - я загрузил Seaview, изменил его /SlickGrid -master/examples/example1-simple.html, чтобы добавить новую опцию enableWrap - во время моего теста example1-simple.html продолжает работать как ожидалось, когда Для параметра enableWrap установлено значение false, но когда его значение равно true, сетка будет пуста без содержимого. Мне было интересно, если есть специальный способ использования опции enableWrap?
Определите эту переменную снаружи....
var tableHeight = 0;
Прежде чем создавать сетку с пятнами, используйте ниже строк:
//30 px для каждой строки это будет охватывать заголовок... Вы можете настроить это значение для своей таблицы.
tableHeight = dataTable.length * 30;
if(tableHeight > ($(window).height() - 400)){
$("#myGrid").height($(window).height() - 400);
}else{
$("#myGrid").height(tableHeight);
}
Если пользователь изменит экран, когда страница уже сгенерирована, ниже будет изменена размер таблицы на основе экрана и количества строк данных:
$(window).resize(function() {
// For grid height
if(tableHeight > ($(window).height() - 400)){
$("#myGrid").height($(window).height() - 400);
}else{
$("#myGrid").height(tableHeight);
}
// For grid width
$("#myGrid").width("100%");
// Resize the grid dynamically.
gridName.resizeCanvas();
});
Поскольку не все вилки SlickGrid являются действительно жизнеспособными вариантами во многих отношениях, я подумал, что многим читателям этой публикации было бы полезно обсудить альтернативы SlickGrid.
Я рассматриваю "жизнеспособные альтернативы", которые полностью поддерживают переменную высоту строки: каждая строка может иметь другую высоту строки, которая автоматически адаптируется к содержимому и позволяет переносить текст на следующую строку.
Я изучил это довольно широко, и, к сожалению, я не нашел жизнеспособных альтернатив, связанных с SlickGrid. Из других альтернатив я нашел только тот, который является бесплатным для коммерческого использования - dojox DataGrid, однако неясно, как вы можете использовать пользовательские редакторы с этим (большинство коммерческих предлагают это).
Существует немало жизнеспособных альтернатив, которые требуют оплаты для коммерческого использования: dhtmlxGrid, jQuery EasyUI DataGrid, jQWidgets, виджет Wijmo Grid, JideTable и Sencha ExtJS Grids. Из них я бы сказал, что лучше всего dhtmlxGrid http://dhtmlx.com/docs/products/dhtmlxGrid/ - Бесплатная версия GPL, версия Pro - $199.