2011-07-01 16 views
9

La función de reordenar columnas de arrastrar/soltar es una gran característica, pero ¿cómo evito que los usuarios muevan columnas particulares (sin datos)?Evitar que ciertas columnas SlickGrid se reordenen

Por ejemplo, estoy usando los Selectores de casilla de verificación para mi Cuadrícula de selección múltiple, pero esta columna siempre debe estar bloqueada a la izquierda, mientras que las otras columnas se pueden reordenar libremente.

Respuesta

2

Miré las demostraciones clasificables en jQuery UI y modifiqué la función setupColumnReorder en slick.grid.js para excluir ciertos elementos. Al excluir la casilla de verificación, pude evitar que se vuelva a ordenar, incluso arrastrando otras columnas antes.

function setupColumnReorder() { 
var checkBoxColumn = $headers.children([0]).attr('id'); 
$headers.sortable({ 
items: "div:not('.slick-resizable-handle','#"+checkBoxColumn+"')", 
... 

Dado que mi columna de casilla de verificación es siempre la primera, acabo de tomar la identificación como tal. Un poco de hack, pero funcionó.

2

He intentado esto:

function setupColumnReorder() { 
var checkBoxColumn = $headers.children([0]).attr('id'); 
$headers.sortable({ 
items: "div:not('.slick-resizable-handle','#"+checkBoxColumn+"')", 
... 

pero tuve problemas al arrastrar otras columnas antes. Entonces probé esto:

grid.onColumnsReordered.subscribe(function (e, args) { 
    if (myGridColumns[0].id != grid.getColumns()[0].id) 
    { 
     grid.setColumns(myGridColumns); 
    } 
    else 
    { 
     myGridColumns= grid.getColumns(); 
    } 
}); 

y estaba bien.

+0

Claro, esto es bueno para detener el redordering real de las columnas, pero el problema es que el usuario puede arrastrar la columna dándole la falsa sensación de que la columna se puede reordenar como las demás. Estoy un poco sorprendido de que no haya una bandera/opción para marcar X muchas columnas de la izquierda como no "ordenables". Quiero decir, ¿tienen una opción de tamaño variable en cada columna? Tal vez hay una buena razón, pero simplemente no la veo ... – Marko

+0

Puede resolver este problema haciendo dos tablas. En la tabla de la izquierda, colocará columnas fijas y las vinculará para campos específicos. Y en la tabla derecha colocarás el resto de las columnas. No será la solución perfecta, pero funcionará según lo previsto. Pero debes tener cuidado al actualizar los datos. – Zarko

Cuestiones relacionadas