jqGrid – checkbox de ahorro estado seleccionado

Al marcar casillas de verificación en las páginas de jqGrid, se eliminan las casillas de verificación seleccionadas. Por lo tanto, si marqué algunas casillas de verificación en la página 1 y luego hago clic en Siguiente para ir a la página 2 y luego vuelvo a la página 1, las casillas de verificación seleccionadas ya no están marcadas.

¿Hay alguna forma en jqgrid para manejar esto en el lado del cliente?

La primera parte de la respuesta contiene la respuesta a tu pregunta. Una pequeña versión mejorada de la demo que puedes encontrar aquí .

Si no necesita clasificar por columna “multiselect”, la demostración hace lo que necesita. Algunas pequeñas observaciones sobre la demostración: la checkbox sobre la columna “selección múltiple” selecciona / deselecciona todas las filas solo en la página actual. Si quieres otro comportamiento, el código será aún más simple. Incluí en la selección de demostración de 3 elementos directamente al cargar la cuadrícula. Se seleccionarán dos elementos en la primera página y un elemento en la segunda página. En alguna situación, el comportamiento puede ser interesante. Si no lo necesita, solo debe comentar la línea idsOfSelectedRows = ["8", "9", "10"];

A continuación encontrará las partes más importantes del código de la demostración

 var $grid = $("#list"), idsOfSelectedRows = [], updateIdsOfSelectedRows = function (id, isSelected) { var index = $.inArray(id, idsOfSelectedRows); if (!isSelected && index >= 0) { idsOfSelectedRows.splice(index, 1); // remove id from the list } else if (index < 0) { idsOfSelectedRows.push(id); } }; // initialize selection idsOfSelectedRows = ["8", "9", "10"]; $grid.jqGrid({ datatype: 'local', // ... other parameters multiselect: true, onSelectRow: updateIdsOfSelectedRows, onSelectAll: function (aRowids, isSelected) { var i, count, id; for (i = 0, count = aRowids.length; i < count; i++) { id = aRowids[i]; updateIdsOfSelectedRows(id, isSelected); } }, loadComplete: function () { var $this = $(this), i, count; for (i = 0, count = idsOfSelectedRows.length; i < count; i++) { $this.jqGrid('setSelection', idsOfSelectedRows[i], false); } } }); 

Si lo deseas, puedes considerar mantener idsOfSelectedRows como un parámetro adicional de jqGrid. Actualmente no hay validación de los parámetros de jqGrid y puede extenderse allí. La ventaja será la persistencia de idsOfSelectedRows junto con el jqGrid correspondiente.

ACTUALIZADO: El bifurcador jqGrid gratuito de jqGrid admite multiPageSelection: true opción multiPageSelection: true que se puede combinar con la opción multiselect: true . Permite mantener el parámetro selarrrow (la lista de identificadores de las filas seleccionadas) en muchas páginas. De forma predeterminada, jqGrid restablece la matriz selarrrow durante la paginación, pero en el caso de uso multiPageSelection: true, multiselect: true no lo hace. Además, preselecciona todas las filas de selarrrow array durante la construcción de la página. Por lo tanto, si uno llena matriz selarrrow con todos los rowids de los elementos (todas las filas en todas las páginas), entonces las filas se mostrarán seleccionadas. El usuario aún puede anular la selección de algunas filas y jqGrid no cambiará los cambios realizados por el usuario.

La demostración , creada para la respuesta , muestra el uso de multiPageSelection: true en jqGrid libre. Otra respuesta describe en breve otras opciones nuevas de jqGrid libre: multiselectPosition: "right" , que permite mover la columna de casillas de verificación multiselección a la derecha, multiselectPosition: "none" , que permite utilizar la funcionalidad de multiselección sin ninguna columna multiselect y hasMultiselectCheckBox callback, que se puede usar para crear casillas de verificación multiselect no en todas las filas de jqGrid.