2012-01-15 12 views
6

Il codice seguente imposta i valori predefiniti per la nuova riga se la riga viene aggiunta utilizzando il modulo. Se la riga viene aggiunta utilizzando il pulsante di aggiunta inline jqGrid dalla barra degli strumenti, questi metodi non vengono chiamati e i valori predefiniti non vengono impostati.Come impostare i valori predefiniti se la riga viene aggiunta utilizzando il pulsante Aggiungi in linea in jqgrid

Come forzare l'aggiunta in linea per eseguire la stessa logica del codice riportato di seguito?

var lastSelectedRow; 
$grid.navGrid("#grid_toppager", { 
del: true, 
add: true, 
view: true, 
edit: true 
      }, 
      {}, 

     { 
     addedrow: 'beforeSelected', 
     url: '/Grid/Add?_entity=Desktop', 
     beforeInitData: function() { 
     // todo: how to call this method from inline add 
     var rowid = $grid.jqGrid('getGridParam', 'selrow'); 
     if (rowid === null) { 
      alert('Select row before adding'); 
      return false; 
      } 
     }, 

     afterShowForm: function(formID) { 
     // todo: how to set default values as this method sets from inline add 
     var selRowData, 
      rowid = $grid.jqGrid('getGridParam', 'selrow'); 
     $('#' + 'Recordtype' + '.FormElement').val('Veerg'); 
     $('#' + 'Nait2' + '.FormElement')[0].checked = true; 
     selRowData = $grid.jqGrid('getRowData', rowid); 
     $('#' + 'Baas' + '.FormElement').val(selRowData.Baas); 
     $('#' + 'Liigid' + '.FormElement').val(selRowData.Liigid); 
     } 
     ); 


$grid.jqGrid('inlineNav', '#grid_toppager', { 
    addParams: { 
     position: "beforeSelected", 
     rowID: '_empty', 
     useDefValues: true, 
     addRowParams: { 
      keys: true, 
      onEdit : onInlineEdit 
     } 
    }, 

    editParams: { 
     editRowParams: { 
      onEdit : onInlineEdit 
      } 
    }, 

    add: true, 
    edit: false, 
    save: true, 
    cancel: true 
}); 

function onInlineEdit(rowId) { 
    if (rowId && rowId !== lastSelectedRow) { 
     cancelEditing($grid); 
     lastSelectedRow = rowId; 
    } 
    } 

Aggiornamento

ho provato il codice

$grid.jqGrid('inlineNav', '#grid_toppager', { 
    addParams: { 
     position: "beforeSelected", 
     rowID: '_empty', 
     useDefValues: true, 
     addRowParams: { 
      keys: true, 
      extraparam: { _dokdata: FormData }, 
      onSuccess : function (jqXHR) { 
alert('addp oncuss'); 
       jqXHRFromOnSuccess=jqXHR; 
       return true; 
       }, 
      afterSave: function (rowID) { 
alert('afeesave addp '); 
       cancelEditing($grid); 
        afterDetailSaveFunc(rowID,jqXHRFromOnSuccess); 
       jqXHRFromOnSuccess=null; 
       }, 
      onError: errorfunc, 
      afterRestore : setFocusToGrid, 
      oneditfunc : function (rowId) { 
       var selRowData, selRowId ; 
       if (rowId && rowId !== lastSelectedRow) { 
       cancelEditing($grid); 
       selRowId = $grid.jqGrid('getGridParam', 'selrow'); 
       if (selRowId) { 
        selRowData = $grid.jqGrid('getRowData', selRowId); 
        $('#' + rowId + '_Reanr').val(selRowData.Reanr); 
        } 
       lastSelectedRow = rowId; 
       } 
      } 
     } 
    } 
); 

Solo oneditfunc func viene chiamato. Come forzare anche i metodi onSuccess, afterSave, onError etc?

Aggiornamento 2

ho aggiunto patch per jqGrid da github raccomandato in risposta e ha cercato

$.extend(jQuery.jgrid.inlineEdit, { 
    addParams: { 
    position: "beforeSelected", 
    rowID: '<%= EntityBase.NewRowIdPrefix %>', 
    useDefValues: true, 
    addRowParams: { 
     keys: true, 
     extraparam: { _dokdata: FormData }, 
     onSuccess : function (jqXHR) { 
     jqXHRFromOnSuccess=jqXHR; 
     return true; 
     }, 
     afterSave: function (rowID) { 
       cancelEditing($grid); 
       <% if (Model is RowBase) { %> 
        afterDetailSaveFunc(rowID,jqXHRFromOnSuccess); 
       <% } else { %> 
        afterGridSaveFunc(rowID,jqXHRFromOnSuccess); 
       <% } %> 
       jqXHRFromOnSuccess=null; 
       }, 
     onError: errorfunc, 
     afterRestore : setFocusToGrid, 
     oneditfunc : function (rowId) { 
     if (rowId && rowId !== lastSelectedRow) { 
      cancelEditing($grid); 
      lastSelectedRow = rowId; 
      } 
     } 
     } 
    } 
}); 

I questo caso entrare non pone fine linea aggiungere. Tutti i parametri da questo codice sono ignorati.

risposta

5

È necessario utilizzare la proprietà defaultValue dello editoptions per impostare i valori predefiniti per la nuova riga aggiunta. Nella documentazione corrente è possibile trovare che l'opzione è valida solo nel modulo Modifica modulo:

L'opzione può essere stringa o funzione. Questa opzione è valida solo nel modulo di modifica modulo quando utilizzato con il metodo editGridRow in modalità di aggiunta. Se definito, l'elemento di input viene impostato con questo valore se solo l'elemento è vuoto. Se utilizzato in seleziona il testo deve essere fornito e non la chiave. Anche quando si utilizza una funzione, la funzione dovrebbe restituire il valore.

ma se si esamina il codice del nuovo metodo addRow vedrete che

  1. il valore predefinito dell'opzione useDefValues è true
  2. il metodo utilizzati (vedi here) la proprietà defaultValue di il editoptions.

AGGIORNATO: OK! Ora vedo il tuo problema. Hai utilizzato solo proprietà errate in editRowParams e addRowParams parti delle impostazioni. Corretta sarà:

$grid.jqGrid('inlineNav', topPagerSelector, { 
    addParams: { 
     position: "beforeSelected", 
     rowID: '_empty', 
     useDefValues: true, 
     addRowParams: { 
      keys: true, 
      oneditfunc : onInlineEdit 
     } 
    }, 
    editParams: { 
     keys: true, 
     oneditfunc: onInlineEdit 
    }, 
    add: true, 
    edit: false, 
    save: true, 
    cancel: true 
}); 

Inoltre è possibile utilizzare la nuova funzione per impostare $.jgrid.inlineEditkeys, oneditfunc o di altri parametri di modifica in linea. L'implementazione della funzionalità non è completamente corretta, ma è possibile esaminare la versione corrente da github (vedere here) e apportare la stessa modifica nella versione di jquery.jqGrid.src.js. In ogni caso, consiglierei di utilizzare la funzione $.jgrid.inlineEdit dopo aver pubblicato la prossima versione di jqGrid.Il vantaggio è che puoi facilmente impostare le opzioni di editRow indipendentemente da dove verrà chiamata la funzione (da inlineNav, 'actions' formattatore o in qualsiasi altro modo).

Nuova jqGridInlineEditRow funzione evento (vedi here per maggiori informazioni) vi permetterà di implementare azioni come quello che fai ora all'interno di onInlineEdit evento senza l'utilizzo di oneditfunc che può essere impostato solo una volta.

+0

Grazie mille. Il codice in questione recupera i valori predefiniti dalla riga corrente e non consente di aggiungere una riga se la riga corrente non è impostata. Come implementarlo usando defaultValue? – Andrus

+0

@Andrus: l'essere esattamente il codice fa cose diverse. Le righe come '$ ('#' + 'Recordtype' + '.FormElement'). Val ('Veerg');' e '$ ('#' + 'Nait2' + '.FormElement') [0] .checked = true; 'sono pura impostazione di valori predefiniti. A causa di altre impostazioni, non capisco perché non si eseguano le impostazioni all'interno del gestore 'onEdit' (nella funzione' onInlineEdit' nel tuo caso)? – Oleg

+0

Ho bisogno di ottenere i valori dalla riga corrente. Non so come ottenere i valori delle righe correnti in onInlineEdit. Probabilmente la corrente è già stata aggiunta, nessun modo per ottenere valori di riga precedenti. anche se non c'è una riga corrente, sarà necessario aggiungere shoudl inline. onInlineedit non consente di aggiungere un'operazione di aggiunta, la nuova riga è già stata aggiunta. – Andrus

Problemi correlati