2011-10-30 7 views
5

Il pulsante Aggiungi barra degli strumenti consente di aggiungere una nuova riga a jqgrid. Aggiungi il modulo che appare contiene tutti i file vuoti. Come impostare i valori dei campi modulo da valori di colonna dalla riga che era corrente/selezionata quando è stato emesso il comando add? json dati remoti viene utilizzato. O se questo è più semplice, come chiamare il metodo server passando la riga corrente/selezionata per recuperare i valori predefiniti per aggiungere il modulo dal server?Come impostare i valori di campo predefiniti per il modulo di aggiunta in jqgrid dalla riga corrente

jqgrid contiene anche colonne nascoste. Se possibile, i valori da colonne nascoste dalla riga corrente devono anche essere inviati per aggiungere il controller se viene salvato il modulo di aggiunta.

Aggiornamento

Ho cercato di usare Oleg grande suggestione utilizzando

  afterShowForm: function(formID) { 
      var selRowData, 
       rowid = grid.jqGrid('getGridParam', 'selrow'); 
      if (rowid === null) { 
      // todo: how to cancel add command here 
      alert('Please select row'); 
      return; 
      } 

      selRowData = grid.jqGrid('getRowData', rowid); 
      if (selRowData === null) { 
      alert('something unexpected happened'); 
      return; 
      } 

      $('#' + 'Baas' + '.FormElement', formID).val(selRowData.Baas); 
      } 

applicazione mantiene aggiungere forma aperta dopo il salvataggio. Dopo aver salvato per la prima volta il campo Baas è vuoto. Sembra che l'evento afterShowForm venga eseguito una sola volta, non dopo ogni salvataggio. Come risolvere questo problema in modo che possano essere aggiunte più righe con valori predefiniti senza chiudere il modulo di aggiunta? Come annullare o non consentire il comando Aggiungi se non ci sono righe selezionate?

risposta

4

Se avete bisogno di fare alcune azioni di inizializzazione solo per modulo Add è possibile utilizzare almeno due approcci:

  • l'utilizzo di defaultValue proprietà come funzione all'interno di editoptions. La funzione di callback defaultValue può fornire il valore per il campo corrispondente del modulo Aggiungi in base ai dati della riga selezionata. Per scopi di ottimizzazione è possibile leggere i dati dalla riga selezionata una volta nel callback/evento beforeInitData. Puoi solo leggere i dati di cui hai bisogno o effettuare una chiamata sincrona al server per ottenere le informazioni di cui hai bisogno. L'unico svantaggio dell'uso della proprietà defaultValue è che utilizza il metodo jQuery.val per impostare il valore predefinito per tutti i campi di Aggiungi modulo con l'eccezione "casella di controllo" edittype. Per le caselle di controllo jqGrid set la proprietà selezionata della casella di controllo false, 0, no, off o undefined non si trova nel valore restituito dalla proprietà defaultValue. Quindi l'approccio non funzionerà con altri tipi di modifica. Ad esempio, può fallire con il tipo di modifica custom.
  • l'utilizzo di beforeShowForm o afterShowForm. All'interno delle funzioni di callback è possibile impostare qualsiasi valore del modulo. È possibile trovare il campo della colonna corrispondente della griglia per id del campo che è uguale al valore della proprietà name della colonna corrispondente.

Come si conosce già si può ottenere l'id della riga selezionata corrente rispetto di getGridParam e ricevere i dati dalla riga selezionata

var selRowData, rowid = grid.jqGrid('getGridParam', 'selrow'); 
if (rowid !== null) { 
    // a row of grid is selected and we can get the data from the row 
    // which includes the data from all visible and hidden columns 
    selRowData= grid.jqGrid('getGridParam', 'selrow'); 
} 

dove grid è oggetto jQuery come $('#list') che seleziona il principale <table> elemento della griglia.

In the demo è possibile vedere come funziona il primo approccio descritto sopra.

+0

Grazie. In alcuni casi è necessario impostare i valori predefiniti per i campi di completamento automatico jqueryUI utilizzati per l'immissione di una chiave esterna da tabelle di ricerca di grandi dimensioni.il completamento automatico è implementato come elemento di modifica personalizzato. Si prega di confermare, è il modo migliore per utilizzare beforeShowForm in questo caso? Dovremmo usare beforeShowForm in altri campi anche per evitare di mescolare due metodi per impostare il valore predefinito? Dove trovare il codice di esempio che imposta il valore predefinito del campo di completamento automatico jqueryui in forma di aggiunta? Esempio di codice – Andrus

+0

nelle chiamate di esempio di risposta 'grid.jqGrid ('getGridParam', 'selrow');' due volte – Andrus

+0

@Andrus: non posso dire quale sia * la migliore *. Può dipendere da molti parametri. jQuery UI Autocomplete 'source' offre molte possibilità su come ottenere i dati dal server, quindi dovresti scegliere da te quale sia il modo * migliore per il tuo ambiente *. Ho appena descritto due modi in cui entrambi possono essere implementati correttamente. – Oleg

Problemi correlati