2009-08-18 18 views
10

Estoy creando un jqgrid con columnas desplegables y estoy usando la edición de celda. Necesito las opciones de la lista desplegable columnas para cambiar dinámicamente y he intentado implementar esta estableciendo la columna para que sea:jqGrid opción de selección dinámica

{ name: "AccountLookup", index: "AccountLookup", width: 90, editable: true, resizable: true, edittype: "select", formatter: "select" }, 

y luego en caso beforeCellEdit tengo:

beforeEditCell: function(id, name, val, iRow, iCol) { 
     if(name=='AccountLookup') {    
      var listdata = GetLookupValues(id, name); 
      if (listdata == null) listdata = "1:1";        
      jQuery("#grid").setColProp(name, { editoptions: { value: listdata.toString()} })         
     } 
    }, 

GetLookupValues simplemente devuelve una cadena en el formato "1: Uno; 2: Dos", etc. Eso funciona bien; sin embargo, las opciones se completan un clic detrás; es decir, hago clic en ID de cuenta en la fila 1 y el menú desplegable está vacío. haga clic en AccountID en la fila 3, las opciones que configuro en la fila 1 clic se muestran en la fila 3 clic. Y así. Entonces, siempre con un clic detrás.

¿Hay alguna otra manera de lograr lo que necesito? Básicamente, las opciones desplegables que se muestran cambian constantemente y necesito cargarlas a medida que el usuario ingresa a la celda para editarlas. Quizás de alguna manera pueda obtener el control de selección en el evento beforeEditCell e ingresar manualmente sus valores en lugar de usar la llamada setColProp? Si es así, ¿podría obtener un ejemplo de hacer eso, por favor?

Otra cosa: si el menú desplegable está vacío y un usuario no cancela la edición de la celda, la secuencia de comandos de la cuadrícula arroja un error. Estoy usando la edición de clientarray si eso hace la diferencia.

+0

Una cosa más: la opción getChangedCells en la columna de selección siempre devuelve el texto y no el valor/Id - ¿hay alguna forma de evitar esto? –

Respuesta

4

Se puede usar la opción dataInit, así:

{ name: "AccountLookup", index: "AccountLookup", width: 90, 
    editable: true, resizable: true, edittype: "select", formatter: "select", 
    editoptions: { dataInit: function(elem) 
    { 
     $(elem).empty() 
      .append("<option value='1'>Apples</option>") 
      .append("<option value='2'>Oranges</option>"); 
    } } } 

basta con sustituir las manzanas estáticas & opciones Naranjas con sus funciones() GetLookupValues.

Cuestiones relacionadas