2011-01-17 20 views

Respuesta

3

Sé que esta pregunta es un poco polvorienta, pero recientemente tuve una necesidad de esta funcionalidad y encontré lo que considero una forma mucho más limpia de hacerlo.

En lugar de adjuntar un evento a cada casilla, ¿por qué no utilizar los eventos onSelectRow y onSelectAll de jqGrid? Cuando se selecciona una fila, verifique si nuestra lista de filas seleccionadas incluye esta fila (basada en la identificación). Agréguelo a la lista si no estaba allí y ha sido seleccionado, elimínelo si estaba allí y ya no está seleccionado. Si se seleccionan todas las filas, repítalas.

var $grid = jQuery("#myGrid"); 
var updateIdsOfSelectedRows = function (id, isSelected) { 
    var contains = idsOfSelectedRows.contains(id); 
    if (!isSelected && contains) { 
     for(var i=0; i<idsOfSelectedRows.length; i++) { 
      if(idsOfSelectedRows[i] == id) { 
       idsOfSelectedRows.splice(i, 1); 
       break; 
      } 
     } 
    } 
    else if (!contains) { 
     idsOfSelectedRows.push(id); 
    } 
}; 

$grid.jqGrid({ 
    .... 
    onSelectRow: function(rowid, status){ 
     updateIdsOfSelectedRows(rowid, status); 
    }, 
    onSelectAll: function (aRowids, status) { 
     var i, count, id; 
     for (i = 0, count = aRowids.length; i < count; i++) { 
      id = aRowids[i]; 
      updateIdsOfSelectedRows(id, status); 
     } 
    }, 
    .... 
)}; 

Espero que esto ayude a los demás a buscar una solución.

0

Supongo que le gustaría seleccionar algunas filas en una página, luego vaya a otra página, tal vez seleccione algunas filas más y mantenga todas esas selecciones.

Deberá gestionar los eventos de selección en cada casilla de verificación. Adjunte un controlador de eventos al each $("#cb_my_grid") y persista una matriz de elementos seleccionados. Luego, cuando necesite los datos (tal vez cuando se envíe la página), puede enviar los valores en la matriz.

Cuestiones relacionadas