Me gustaría proporcionar una altura de fila variable en función del tamaño del contenido. ¿Es posible en Slickgrid?¿Es posible una fila variable en SlickGrid?
¿Me puede indicar algún ejemplo?
Me gustaría proporcionar una altura de fila variable en función del tamaño del contenido. ¿Es posible en Slickgrid?¿Es posible una fila variable en SlickGrid?
¿Me puede indicar algún ejemplo?
En pocas palabras, esto no es compatible con SlickGrid y probablemente nunca lo sea. Lo siento.
Hable de pragmático. La solución personalizada LOL @Stephen parece factible. Voy a seguir Google y Stackoverflowing por ahora. –
me he dirigido a esto [aquí] (http://stackoverflow.com/a/29399927/262256) con algunos códigos personalizados. -no hacks en los códigos slickgrid requeridos;) – violet313
Esto es posible, pero no es trivial y es probable que tenga una penalización de rendimiento. La forma en que funciona SlickGrid, necesita poder responder rápidamente a las siguientes dos preguntas:
Cuando utiliza una altura de fila estática, responder estas preguntas es trivial; sin embargo, con la altura de fila dinámica, deberá mantener un par de estructuras de datos adicionales.
Aquí es más o menos lo que he cambiado en Slick.Grid.js
Para que esto sea práctico (rendimiento), también necesitará una memoria caché de los desplazamientos superiores de fila (un caché de sumas de tamaño de fila). Esto permitirá un cálculo rápido para la primera pregunta y permitirá que la búsqueda binaria responda la segunda.
Espero que ayude.
Sé que esto no satisface el meollo de la cuestión, pero decidió una solución simple por el momento que es un esfuerzo mínimo y cumple con mis requisitos en este momento. Entonces, esto es solo en caso de que otros buscaran una solución simple también.
Comencé con un cuadro de entrada, donde cambiar el valor cambiaría el tamaño de la fila. Sin embargo, ahora me he decidido a usar un control deslizante. De hecho, dado que tengo tan pocos datos en mi grilla (garantizado que son pequeñas cantidades de datos, y muy pocas filas), redimensioné dinámicamente la grilla a medida que se desliza el control deslizante. Ahora, sé que muchos dirán que esta es una idea terrible porque puede ser terriblemente lenta, pero de nuevo, estoy usando una cantidad muy pequeña de datos.
La clave es que vuelvo a crear la cuadrícula con el nuevo valor rowHeight establecido en las opciones.
Agregue el código para manejar el control deslizante y volver a crear la cuadrícula (alternativamente, puede mover lo que tengo en la función "deslizar" a la función "detener" si no desea volver a dibujar en cada marca deslizante):
$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) {
}
});
Además, deben tener en cuenta que esto no es en función de cada fila, pero de nuevo, se ajusta a mis necesidades por ahora. No es ideal, pero funciona. Además, si realmente necesita renderizar la cuadrícula la primera vez sin ningún desbordamiento, puede crear un div oculto cada vez que obtenga el texto en cuestión y agregar display:table-cell
, luego obtener la altura div y establecer ese valor como las opciones de cuadrícula para rowHeight. Luego, cree (o recree) la grilla.
Lo he implementado en mi proyecto, con la ayuda de la respuesta de @Stephen Robinson aquí.
Si alguien está interesado, pueden consultar:
https://github.com/vihari/Seaview/blob/version3.0/SlickGrid-master/slick.grid.js.
Se puede habilitar con el archivo anterior si establece options.enableWrap en true.
Gracias.
Para la solución de Vihari Piratla - He descargado Seaview, he modificado su /SlickGrid-master/examples/example1-simple.html para agregar la nueva opción enableWrap - durante mi prueba el example1-simple.html continúa funcionando como se esperaba cuando enableWrap se establece en false, pero cuando se establece en true, la cuadrícula se dibuja vacía sin contenido. Me preguntaba si hay una forma especial de usar la opción enableWrap?
Es una versión 3.0 de Seaview, espero que esto sea lo que estés usando. –
¡Gracias por volver tan rápido! He intentado la rama 3.0 pero también me ha dado una cuadrícula en blanco. Traté de corregir algunos lugares en el código slick.grid.js, p. Ej. data.getLength() con getDataLengh(), data.getItem() con getDataItem() .. después de lo cual el contenido se dibuja alrededor de más de 30 filas (lo cual está bien si puedo definir cuánto precargar en init), pero editando las células ya no funcionan ... No estoy seguro de si los cambios que he realizado son correctos ... – Bill
No estoy seguro de si puedes editar las celdas, porque no me molesté en eso. Este debe ser el comportamiento observado: una vez cargado debe mostrar todas las filas (la paginación puede no funcionar). Para hacerlo O (constante), las alturas de fila se calculan y se agregan solo cuando uno se desplaza hacia abajo y, por lo tanto, la paginación puede no funcionar. –
Existe también la implementación de altura variable por JLynch7 en github:
https://github.com/JLynch7/SlickGrid/tree/variableRowHeight
Por lo que yo entiendo la altura se establece por el usuario y no de forma automática calcula en base al contenido de las células de la fila (que sólo miré el ejemplo/ejemplo-variable-fila-altura-dataview.html)
justo lo que estoy buscando :) ¡Gracias! – swalter88
Recientemente he bifurcado SlickGrid para agregar un conjunto de nuevas características, incluyendo las filas variables (y redimensionables). Puedes probarlo aquí: https://github.com/globexdesigns/doby-grid
definir esta variable fuera ....
var tableHeight = 0;
Antes de crear la red mancha de uso por debajo de las líneas:
// 30 píxeles para cada línea esto cubrirá la cabecera ... Se puede ajustar este valor para su mesa.
tableHeight = dataTable.length * 30;
if(tableHeight > ($(window).height() - 400)){
$("#myGrid").height($(window).height() - 400);
}else{
$("#myGrid").height(tableHeight);
}
Si el usuario cambia la pantalla cuando ya se generó la página, el siguiente va a cambiar el tamaño de la tabla en función de la pantalla y el número de filas de datos:
$(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();
});
Como un resumen de las opciones anteriores ninguno de ellos son oficiales, compatibles y listos para producción. Incluso la opción doby-grid (más compatible) todavía se muestra como no lista para producción.
Nota, también hay diferencias entre:
Sorprendentemente, con todas las variantes de SlickGrid anteriores (y muchas otras bibliotecas de DataGrid), puede obtener uno o dos de los anteriores, pero no los tres.
Si no está tan preocupado por oficial, con el apoyo y la producción listo, entonces este es mis impresiones de la comprobación del 3 SlickGrid variantes mencionadas anteriormente:
Seaview
JLynch7
Doby de la red
Como las horquillas de SlickGrid son opciones realmente viables en muchos aspectos, pensé que sería útil para muchos lectores de esta publicación analizar alternativas a SlickGrid.
Considero 'alternativas viables' que soportan completamente la altura de fila variable: cada fila puede tener una altura de fila diferente que se adapta automáticamente para ajustarse al contenido y permite que el texto se ajuste a la siguiente línea.
He examinado esto de forma bastante exhaustiva y, desafortunadamente, no he encontrado alternativas viables que estén relacionadas con SlickGrid. De otras alternativas, solo he encontrado una que es gratis para uso comercial - dojox DataGrid, sin embargo, no está claro cómo podría usar editores personalizados con esto (la mayoría de los comerciales ofrecen esto).
Existen bastantes alternativas viables que requieren pago para uso comercial: dhtmlxGrid, jQuery EasyUI DataGrid, jQWidgets, Wijmo Grid widget, JideTable y Sencha ExtJS Grids. De estos, personalmente diría que lo mejor es dhtmlxGrid http://dhtmlx.com/docs/products/dhtmlxGrid/ - La versión gratuita es GPL, la versión Pro cuesta $ 199.
posible duplicado de [¿Se puede modificar dinámicamente la altura de la fila de SlickGrid?] (Http://stackoverflow.com/questions/10535164/can-slickgrids-row-height-be-dynamically-altered) – violet313