2011-04-03 10 views
5

Estoy usando jqgrid en mi nuevo proyecto. En un caso específico, necesito usar un elemento de selección en la cuadrícula. No hay problema.jqgrid edittype seleccionar cargar valor a partir de los datos

que definen el colModel y la columna, por ejemplo, como (de wiki)

colModel : [ 
    ... 
{name:'myname', edittype:'select', editoptions:{value:{1:'One',2:'Two'}} }, 
    ... 
] 

Pero ahora, cuando me carga los datos de mi yo preferiría la columna "myname" para contener el valor 1. Este won' t trabajo para mí, en su lugar debe contener el valor "Uno".

El problema con esto es que el texto-parte del elemento de selección está en mi caso localizada en la capa de negocio donde se genera dinámicamente el colModel. Además, el tipo de datos para la entidad que genera los datos a través de EF 4 puede no ser una cadena. Luego, tengo que encontrar el texto traducido correcto y manipular el resultado de los datos para que la columna "mi nombre" no contenga un número entero, que generalmente es el caso, sino una cadena en lugar del texto localizado.

No hay ninguna opción que puede utilizar para que cuando los datos contienen el valor, que coincide con una opción en la lista de selección, la parrilla se encuentra esa opción y presenta el texto. Ahora la cuadrícula presenta el valor como un texto y, primero, cuando hago clic en editar, encuentra la opción correspondiente y presenta el texto. Cuando deshago la edición, vuelve a presentar el valor nuevamente.

empecé a pensar en una solución y esto es lo que ocurrió. Por favor, si conoce una solución mejor o si sabe que hay una opción incorporada, no dude en responder. De lo contrario aquí es lo que hice:

loadComplete: function (data) { 
        var colModel = grid.getGridParam('colModel'); 
        $.each(colModel, function (index, col) { 
         if (col.edittype === 'select') { 
          $.each(grid.getDataIDs(), function (index, id) { 
           var row = grid.getRowData(id); 
           var value = row[col.name]; 
           var editoptions = col.editoptions.value; 
           var startText = editoptions.indexOf(value + ':') + (value + ':').length; 
           var endText = editoptions.indexOf(';', startText); 
           if (endText === -1) { endText = editoptions.length; } 
           var text = editoptions.substring(startText, endText); 
           row[col.name] = text; 
           grid.setRowData(id, row); 
          }); 
         } 
        }); 
       } 

Funciona y voy a dejarlo así si nadie se le ocurre una manera mejor.

Respuesta

6

sólo debe incluir la opción adicional formatter:'select' en la definición de la columna. Ver the documentation para más detalles.

+1

Funciona muy bien. He buscado en la documentación y en google pero creo que no encontré las palabras de búsqueda correctas. Cuando se habla de las opciones del formateador. Ahora formato columnas de tiempo (HH: mm) en el servidor porque no encontré de ninguna otra manera. Para configurar el formateador: "fecha" formatea mi DateTime en aaaa-mm-dd. ¿Hay una mejor manera de hacer esto en la grilla? Puedo ver las opciones de máscara, pero no entiendo cómo usarla. Parece que me gustaría algo como ShortTime. ¿Es posible? – John

+0

Me salvaste el día. –

+0

@SergeyShabanov: ¡De nada! Me alegra que algunas de mis viejas respuestas todavía sean útiles. – Oleg

Cuestiones relacionadas