2011-05-18 21 views
6

¿Cómo puedo hacer que todas las columnas de jqgrid no se puedan redimensionar? Actualmente creo que en cada columna debo especificar la propiedad {resizable: false}. ¿Hay alguna forma de especificar para toda la grilla?Detener columnas redimensionables en jqgrid

Respuesta

14

Comenzando con la versión 3.8.2 jqGrid admite una característica muy útil: plantillas de columnas. (Probablemente no sea del todo correcto para mí elogiar la función porque la característica se introdujo en my own suggestion :-)). La característica aún no está realmente documentada, pero se puede usar muy fácilmente.

Lo explico en un ejemplo. Si define el parámetro jqGrid adicional

cmTemplate:{resizable:false} 

entonces su problema será resuelto.

Si usted tiene más propiedades que son comunes en todas las columnas de colModel artículos, por ejemplo align:'center' la cmTemplate le ayudará también (cmTemplate: {tamaño variable: falsa, alinee: 'centro'}). En jqGrid 3.8.2 era pequeño bug en prioridad de la configuración de la plantilla relativa a la configuración desde colModel, pero el error se corrigió en jqGrid 4.0.0. Por lo tanto, las propiedades de cmTemplate se pueden interpretar como valores predeterminados para colModel elementos.

Una versión más del uso de plantilla de la columna jqGrid es en la forma:

var myDateTemplate = {sorttype:'date', formatter:'date', 
         formatoptions: {newformat:'m/d/Y'}, datefmt: 'm/d/Y', 
         align:'center', width:80 } 
$("list").jqGrid({ 
    colModel: [ 
     ... 
     {name:'column1': template:myDateTemplate}, 
     {name:'column2': template:myDateTemplate, width:90}, 
     ... 
    ] 
    ... 
}); 

En el camino se puede definir algunas plantillas (como myDateTemplate) y utilizar allí en muchos lugares en su rejilla (o GID). Con respecto a la función, puede hacer que su código sea más corto, mejor legible y fácilmente modificable.

+0

usted es realmente grande en jqGrid. Voy a probar y ver cómo funcionan las cosas, antes de eso voy a actualizar jqgrid de 3.8.2 a 4.0. – VJAI

+0

No puedo actualizar con éxito :(frente a muchos problemas aquí y allá. ¿Hay alguna manera de que podamos hacer esto en 3.8.2? – VJAI

+0

@Vijaya Anand: escribí en mi respuesta que las plantillas de columna ya están soportadas en jqGrid 3.8 .2. Así que puedes simplemente agregar el parámetro 'cmTemplate: {resizable: false}' en tu grilla actual, tu problema debe ser resuelto. – Oleg

0

plantilla funciona muy bien para mí:

{ name: 'quantity_warehouse', index: 'quantity_warehouse', template: intColTemplate, width: '70' }, 

{ name: 'status', index: 'status', align: 'left', template: stringColTemplate, width: '90' }, 

{ name: 'snapshot_at', index: 'snapshot_at', template: dateColTemplate }, 

{ name: 'applied_at', index: 'applied_at', template: dateColTemplate }, 

JS:

var dateColTemplate = { align: 'left', search: true, stype: 'text', width: '70', datefmt: 'm/d/y', formatter: 'date', formatoptions: { srcformat: 'm/d/y', newformat: 'm/d/Y' }, sorttype: 'date', searchrules: { required: true, date: true }, searchoptions: { sopt: ['eq', 'ge', 'le'], 

    dataInit: function (el) { 
     $(el).datepicker({ changeYear: true, changeMonth: true, showButtonPanel: true }); 
    } 
} 
}; 
var intColTemplate = { align: 'left', search: true, stype: 'text', searchoptions: { sopt: ['eq', 'ge', 'le']} }; 
var stringColTemplate = { align: 'left', search: true, stype: 'text', searchoptions: { sopt: ['bw', 'cn']} };