2011-12-19 10 views
14

Estoy usando una cuadrícula pulida para mostrar los datos en la cuadrícula. La red Slick calcula todo lo que se refiere a la altura y el ancho cuando se crea esa cuadrícula en particular y la cuadrícula se ve realmente bien. El problema fomenta cuando se crea la cuadrícula pero está oculta y en la acción de otra cosa (casilla de verificación/seleccionar botón de radio) la cuadrícula se vuelve visible. esta vez el cálculo sale mal y los encabezados y las celdas de la fila (columna del encabezado) no están alineados verticalmente. enter image description herealineación de celda de fila de cabecera de cuadrícula pulida

No puedo entender cómo controlar esto. Si alguien más también ha sufrido a manos de la grilla resbaladiza y ha sido capaz de defenderse, por favor descubra las municiones.

En previsión, Premanshu

Respuesta

2

tuve un problema similar cuando se muestra de forma dinámica/ocultar cuadrículas usando jQuery .show() y .hide().

Si crea la etiqueta div con display: none (por lo que se oculta inicialmente), las columnas de la cuadrícula no se inician correctamente. Para solucionar esto, creo la etiqueta div con visibility: hidden y elimino este estilo antes de usar los métodos .hide() y .show().

Mi código es más o menos así:

<div id="mygrid" style="visibility: hidden"></div> 

    $grid = $("#mygrid") 

    grid = new Slick.Grid($grid, gridData, gridColumns, gridOptions); 

    // Hide grid by default, remembering to remove the visibility style 
    $grid.hide(); 
    $grid.css("visibility", "visible"); 

    // You can now show and hide the grid using normal jQuery methods 
    $grid.show(); 
    $grid.hide(); 

Una vez que se inicializa y la propiedad visibility: hidden; se retira, estoy usando .hide() y .show() pero sospecho que esto funcionará si se manipula el display: none; atribuyen directamente si no estás usando JQuery.

Espero que esto ayude.

+0

@ njr.Gracias por la respuesta ... pero de alguna manera esta solución no parece lo suficientemente considerada para resolver el problema. ! [Imagen en la pregunta] (C: \ Users \ premanshu \ Desktop \ slick alignment1 es lo que obtengo después de utilizar su respuesta. – Premanshu

+0

También he agregado algunas clases personalizadas a los encabezados y parece que este es el Razón detrás de este alineamiento erróneo. Intenté uno en jsfiddle utilizando el suyo y estaba funcionando bien. http://jsfiddle.net/wLPLA/13/ – Premanshu

+0

En su jsFiddle tiene la cuadrícula definida con 'display: none' en el . Formato HTML Trate de usar 'visibilidad: hidden' lugar – njr101

0

Esto es compatible y no debería suceder. De hecho, la mayoría de los ejemplos (incluido http://mleibman.github.com/SlickGrid/examples/example1-simple.html) tienen la misma implementación solo para asegurarse de que funciona correctamente.

¿Puede incluir un jsfiddle.net repro?

+1

si la grilla se inicializa y es visible en la carga de la página, funciona perfectamente bien. Pero si la grilla se inicializa y no se ve en la carga de la página, no funciona de la mejor manera. – Premanshu

+0

el violín está en jsfiddle.net/wLPLA/18 Pero el problema no está llegando ... – Premanshu

+0

¿Esto fue compatible con el lanzamiento 1.4.2 ??? Estoy usando esa versión como línea de base y, además, mis personalizaciones. – Premanshu

1

Tuve exactamente el mismo problema y después de leer las respuestas de @Premanshu y @Tin encontré una ruta diferente para resolverlo.

Básicamente, debe omitir un ciclo de evento y dejar que el DOM se ponga al día antes de mostrar la cuadrícula, esto le permitirá encontrar los anchos de columna correctos. Usé setTimeout para hacerlo.

var myGrid = $("<div id='myGrid' style='width:600px;height:500px;'></div>"); 
    grid = new Slick.Grid(myGrid, data, columns, options); 


    // ... later on, append the container to the DOM and initialize SlickGrid 
    setTimeout(function(){ 
    myGrid.appendTo(that.$el); 
    grid.init(); 
    },1); 
6

Tuve un problema similar al usarlo en una página que tenía twitter bootstrap css en él. La solución fue anular el tamaño de la caja a la casilla de contenido

*, *: antes, *: después de { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; tamaño de caja: content-box; }

probablemente debería averiguar exactamente qué clases realmente lo necesitan, pero eso solucionó las cosas para mí.

+1

Lo mejor es anular los subelementos de.grid; de lo contrario, puede afectar a Bootstrap, que espera ocuparse de los tamaños de los recuadros fronterizos. P.ej. '.grid *, .grid: before *, .grid: after * { \t -webkit-box-sizing: content-box; \t -moz-box-sizing: content-box; \t tamaño de caja: content-box; } ' – IlluminAce

6

pude conseguir que esto funcione en la rutina de carga 3 (un ambiente donde box-sizing se establece en border-box) simplemente aplicando box-sizing: content-box a la .slick-header-column.

.slick-header > .slick-header-columns > .slick-header-column { 
    -webkit-box-sizing: content-box;                
    -moz-box-sizing: content-box; 
    box-sizing: content-box; } 

Sólo tenga cuidado al modificar las propiedades de border.slick-header-column. Yo era capaz de eliminar el borde a la derecha ajustando el color a transparent:

.slick-header > .slick-header-columns > .slick-header-column:last-child { 
    border-right-color: transparent; 
} 

Nota: Se puede jugar con la especificidad del selector - el selector se desea sobreescribir es:

.slick-header-column.ui-state-default { ... } 
+1

Esto funcionó perfectamente para mí. – AndeeC

11

Ninguna de estas soluciones trabajó para mí, puede ser debido a que el código de SlickGrid cambió desde 2012 :) he encontrado una solución en este post, que es similar a la de @ Wex, pero con pequeñas diferencias:

.slickgrid, 
.slickgrid *, 
.slick-header-column { 
    box-sizing: content-box; 
    -moz-box-sizing: content-box; 
    -webkit-box-sizing: content-box; 
} 

Donde .slickgrid es un selector de un elemento de contenedor de rejilla.

0

Lo resolvió para mí. Esto es lo que estaba haciendo: 1. rejilla iniciación del datos 2. anexados para que 3. Presentar usando modal del div que contiene la rejilla

para resolver lo hice: 1. Presente usando modal del div que contiene la cuadrícula 2. Inicializar la cuadrícula 3. Adjuntar datos

Cuestiones relacionadas