jqGrid: ¿cómo pasar tanto el valor de estado booleano verificado como el valor único real a una casilla de verificación en jqGrid?

Tengo una página JSP con varias instancias de jqGrid. Una columna de esa cuadrícula tiene una casilla de verificación que representa si la fila está seleccionada o no. Necesito tener una casilla de verificación similar a HTML normal en jqGrid, la que tiene un estado booleano marcado/no marcado y el valor único real como:
<input type="checkbox" name="vehicle" value="Car" checked="checked" />

En jqGrid me enfrento a una limitación en la que solo puedo pasar un valor a la casilla de verificación. En el colModel de jqGrid tengo esto:

colModel:[
    {name:'assign', index:'assign', width:200, editable:true, edittype:'checkbox', formatter:"checkbox", formatoptions:{disabled : false}}
    ]

Al pasar los datos a mi jqGrid tengo este tipo de datos:

var mydata = [
              {assign:"${assignBool}"}
           ];

Sin embargo, el valor que se establece en colModel [] "asignar" podría ser el valor booleano que determina si la casilla de verificación está marcada o no O podría ser el valor real que queremos establecer para la casilla de verificación para determinar qué casilla de verificación se marcó.

Al pasar el valor booleano, pude marcar las casillas de verificación correctamente en la pantalla, pero no pude obtener los valores (los valores de identificación únicos).

Al pasar los valores únicos reales para "asignar", todas las casillas de verificación mostraban el estado marcado predeterminado incorrecto para todas las casillas de verificación.

No pude determinar cómo pasar tanto el estado booleano marcado como el valor único real de la casilla de verificación a la fila "asignar" en jqGrid.

Quiero poder recorrer toda la página usando el siguiente código y obtener los valores únicos reales de todas las casillas de verificación:

$("#editBtn").click(function() {
    var val = [];
    var checkedNames = '';
    $('input:checkbox:checked').each(function(index) {
        val[index] = $(this).val() + ',';
        checkedNames += val[index];
        }
    );  
    alert("Checked check box values: " + checkedNames);
});

Si paso el estado verificado booleano a la "asignación" anterior, todo lo que obtengo en la variable Nombres verificados es una lista de valores Verdadero/Falso o Sí/No y no los valores reales.

¿Alguien más ha enfrentado un problema similar o alguien tiene una solución a este problema? Para mí, parece una limitación de jqGrid o tal vez no estoy al tanto de dicha funcionalidad en jqGrid. Cualquier ayuda en este sentido sería realmente apreciada.

preguntado el 11 de junio de 12 a las 19:06

1 Respuestas

Una cosa que suelo hacer con jqGrid para administrar el comportamiento personalizado es pasar el código HTML que quiero que aparezca en colModel como texto. Entonces, en lugar de usar el edit propiedades que ha enumerado anteriormente, simplemente envíe el HTML como texto en su respuesta JSON desde el servidor.

jqGrid representará esto como HTML y luego podrá administrar el comportamiento con jQuery (con el que parece estar familiarizado).

ACTUALIZACIÓN Por ejemplo, quería integrar minigráficos de jQuery en mi cuadrícula, por lo que en mi controlador en mi servidor (estoy usando ASP.NET MVC), devuelvo:

return Json(new
{
    total = (int)Math.Ceiling((double)data.Count / rows),
    page = 1,
    records = data.Count,
    rows = (from item in data
            select new
             {
                 id = "GR" + data.IndexOf(item),
                 cell = new object[] 
                 { 
                     item.Name,
                     "<span class=\"inlinesparkline\" values=\"" + item.SparklineData + "\"></span>"
                 }
             }).ToArray()
        });

En mi jqGrid, esta columna está en colModel como texto:

...
colModel: [
    { name: 'Name', index: 'Name' },
    { name: 'Sparkline', index: 'Sparkline', classes: 'sparkcell' }
],
...

Ahora en mi gridComplete, puedo usar jQuery para hacer lo que necesite usando el .sparkcell selector:

...
gridComplete: function () {
    $('.sparkcell').sparkline();
},
...

Respondido el 12 de junio de 12 a las 19:06

Pablo, gracias por el consejo. ¿Podría dar un fragmento de código en el que haga lo mencionado? Obtuve el concepto general, pero no estoy seguro de cómo implementarlo realmente. - MSR

Gracias Pablo Parece que debería funcionar. Intentaré personalizar una solución similar a mis requisitos y ver si funciona para mí. - MSR

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.