2011-01-17 44 views
8

Tengo algunos problemas para que algunas celdas (con cellEdit: true) no sean editables aunque la columna esté configurada como editable.JQGrid: establece dinámicamente una celda para que no se pueda editar según el contenido

He intentado de muchas maneras, como beforeEditCell, formateadores, etc. Parece que ninguno funciona.

Lo más cercano que tengo es configurar un formateador en la columna que me gustaría ser editable y luego usar setCell para establecer la clase 'no editable-célula' (fragmento a continuación). La primera vez que hace clic en la celda, desafortunadamente va al modo de edición, pero si hace clic en otra parte e intenta volver a editar la celda, no será editable correctamente.

También he intentado usar el mismo recorte pero dentro de beforeEditCell, se detiene con éxito la célula de ser editada pero a su vez 'congela' la grilla. Ya no puedes seleccionar ninguna otra celda.

function noEditFormatter(cellValue, options, rowObject) { 
    if (cellValue == 'test') 
     jQuery("#grid").jqGrid('setCell', options.rowId, 'ColName', '', 'not-editable-cell'); 
    return cellValue; 
} 

Cualquier ayuda sería muy apreciada.

Respuesta

12

La idea de utilizar el método setCell para agregar la clase 'no-editable-cell' a las celdas que no deberían ser editables es correcta. Usted elige solo el lugar equivocado para hacer esto. Dentro del formateador personalizado, la cuadrícula no puede construirse hasta el final. Le recomiendo que use loadComplete o gridComplete para examinar el contenido de la cuadrícula de la página actual y marque algunas celdas como no editables.

Preparé an example que demuestran esto. Al igual que en su ejemplo, todas las celdas que tienen texto de "prueba" están marcadas como no editables. En la forma en que puede examinar una celda y marcar otras celdas como no editable.

+0

Gracias un montón, esto funciona a la perfección. – Shawn

+0

@Shawn: ¡Bienvenido! – Oleg

+0

@Oleg: Quiero el jqgrid completo mientras se carga con pocas celdas en modo editable en cada fila. Es eso posible. No puedo encontrar nada a través de la búsqueda. Por favor, ayuda –

3
var cellattr = function(rowId, tv, rawObject, cm, rdata) { 
if(rawObject.locked) return ' class="not-editable-cell"'; 

};

En colModel: cada opciones de columna añadir

{name: 'name',index: 'name', editable: true, width: 100, sortable: false, align: 'center', cellattr: cellattr} 
1

que tenía que resolver esto ahora (2015) y encontré an approach that looks clean: especificar una función de cellbeginedit que devuelve false si no se permite a la célula para ser editado. Tomado del artículo vinculado y modificado:

var checkIfRowIsValid = function (rowIndex) { 
    //somehow get cellValue 
    ... 
    if (cellValue == 'test') return false; 
} 
// initialize jqxGrid 
$("#jqxgrid").jqxGrid(
{ 
    source: dataAdapter, 
    editable: true, 
    selectionmode: 'singlecell', 
    columns: [ 
     { text: 'First Name', columntype: 'textbox', datafield: 'firstname', 
     width: 90, cellbeginedit: checkIfRowIsValid}, 
     { text: 'Last Name', datafield: 'lastname', columntype: 'textbox', 
     width: 90, cellbeginedit: checkIfRowIsValid} 
    ] 
}); 
+2

Este ejemplo usa jqxGrid. El OP está usando jqGrid. – svattom

Cuestiones relacionadas