2011-02-23 32 views
5

Soy nuevo en jqGrid y necesito ayuda con un escenario que no puedo descifrar.Cómo hacer que la celda se pueda editar dinámicamente en jqGrid

soy capaz de hacer que una celda no editable usando el siguiente código:

jQuery("#updAssist").jqGrid('setCell',rowid,'precPsProg','','not-editable-cell'); 

Ahora quiero hacer la celda editable de nuevo basado en una cierta condición.

¿Qué clase debo usar para lograr eso?

¿Existe una clase de 'célula editable' que pueda usar?

Respuesta

8

Debe eliminar clase 'de células no-editable' de la celda (<td> elemento)

td.removeClass('not-editable-cell'); 

hay que seleccionar todas las celdas (<td> de elementos) que desea convertir en editable.

Realicé the demo que demuestran cómo hacerlo. El fragmento de código más importante de la demo es

var grid = $("#list"); 
var getColumnIndexByName = function(gr,columnName) { 
    var cm = gr.jqGrid('getGridParam','colModel'); 
    for (var i=0,l=cm.length; i<l; i++) { 
     if (cm[i].name===columnName) { 
      return i; // return the index 
     } 
    } 
    return -1; 
}; 
var changeEditableByContain = function(gr,colName,text,doNonEditable) { 
    var pos=getColumnIndexByName(gr,colName); 
    // nth-child need 1-based index so we use (i+1) below 
    var cells = $("tbody > tr.jqgrow > td:nth-child("+(pos+1)+")",gr[0]); 
    for (var i=0; i<cells.length; i++) { 
     var cell = $(cells[i]); 
     //var cellText = cell.text(); 
     var unformatedText = $.unformat(cell,{rowId:cell[0].id, 
             colModel:gr[0].p.colModel[pos]},pos); 
     if (text === unformatedText) { // one can use cell.text() instead of 
             // unformatedText if needed 
      if (doNonEditable) { 
       cell.addClass('not-editable-cell'); 
      } else { 
       cell.removeClass('not-editable-cell'); 
      } 
     } 
    } 
}; 
grid.jqGrid({ 
    datatype: "local", 
    ... 
    cellEdit: true, 
    cellsubmit: 'clientArray', 
    loadComplete: function() { 
     changeEditableByContain(grid,'name','test',true); 
    } 
}); 
$("#doEditable").click(function(){ 
    changeEditableByContain(grid,'name','test',false); 
}); 
$("#doNonEditable").click(function(){ 
    changeEditableByContain(grid,'name','test',true); 
}); 

En la demo que las células de la columna de 'cliente' que tienen el texto "prueba" serán marcados como "no editable". Más tarde, uno puede hacer que las celdas sean "editables" o "no editables" haciendo clic en el botón correspondiente.

+0

Thx para la respuesta Oleg. – Abhi

+0

Probé las tres líneas de código a continuación, pero ninguna parece funcionar. – Abhi

+0

jQuery ("tr #" + rowid, jQuery ("# ​​updAssist")). RemoveClass ('not-editable-cell'); \t \t \t \t \t jQuery ("tr #" + rowid) .removeClass ('not-editable-cell'); \t \t \t \t \t jQuery ("# ​​updAssist"). JqGrid ('setCell', rowid, 'precPsProg', '', {editable: true}); – Abhi

Cuestiones relacionadas