2009-08-18 18 views
10

Sto creando un jqgrid con colonne a discesa e utilizzo la modifica delle celle. Ho bisogno delle opzioni del menu a discesa colonne per modificare dinamicamente e ho provato l'attuazione del presente impostando la colonna di essere:jqGrid opzione di selezione dinamica

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

e poi in caso beforeCellEdit ho:

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 restituisce semplicemente una stringa nel formato "1: One; 2: Two" ecc. Che funziona bene tuttavia le opzioni sono popolate con un clic indietro - cioè clicco su AccountID nella riga 1, e il menu a discesa è vuoto, tuttavia quando poi fare clic su AccountID nella riga 3 le opzioni che ho impostato nella riga 1 clic sono visualizzate nella riga 3 clic. E così via. Quindi sempre uno scatto dietro.

C'è un altro modo per ottenere ciò di cui ho bisogno? Bacialmente le opzioni a discesa visualizzate cambiano sempre e ho bisogno di caricarle quando l'utente entra nella cella per la modifica. Forse posso in qualche modo ottenere il controllo select nell'evento beforeEditCell e inserire manualmente i suoi valori invece di usare la chiamata setColProp? Se così potrei avere un esempio di farlo per favore?

Un'altra cosa: se il menu a discesa è vuoto e un utente non annulla la modifica della cella, lo script della griglia genera un errore. Sto usando la modifica del clientarray se questo fa la differenza.

+0

Un'ultima cosa: l'opzione getChangedCells sulla colonna di selezione restituisce sempre il testo e non il valore/Id - c'è un modo per aggirare questo? –

risposta

4

È possibile utilizzare l'opzione dataInit, in questo modo:

{ 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 sostituire le mele statiche & arance opzioni con la funzione() GetLookupValues.

Problemi correlati