2012-02-02 17 views
7

Ho una griglia che sto recuperando l'intero set di dati per, quindi voglio che gli utenti abbiano la possibilità di ordinare i dati risultanti. Sto usando i seguenti attributi, ma la griglia non ordina. Vale anche la pena menzionare dopo che l'utente fa clic su un pulsante, farò una chiamata AJAX, quindi dovrò ricaricare dal sorgente, ma dato che sto trasferendo tutti i dati sul client ogni volta, non dovrei andare torna al server solo per ordinare.jqGrid Dati remoti, ordinamento locale

loadonce: true, // to enable sorting on client side 
sortable: true //to enable sorting 

Qualsiasi suggerimento è molto apprezzato!

risposta

2

Non è troppo chiaro qual è il problema che si potrebbe vedere, ma quando si utilizza un'origine dati remota con ordinamento e filtro locali, ci sono un paio di cose avete bisogno di guardare fuori per:

  1. anche se si ordina a livello locale, è ancora necessario per ordinare da remoto anche in modo che i dati remoti caricati corrisponderanno ordinamento corrente della griglia.
  2. Non è possibile modificare il valore loadonce una volta caricata la griglia, ma è possibile modificare il valore datatype e forzare una ricarica dal server. La griglia avrà ancora la vostra iniziale url che si imposta per la griglia in modo tutto ciò che serve per eseguire è:

    $(this).jqGrid('setGridParam', {datatype:'json'}).trigger('reloadGrid'); 
    
  3. Si perdono le selezioni quando si ricarica da remoto e anche quando si ordina a livello locale. Per salvarli, dovrai aggiungere gestori che salveranno la selezione, eseguiranno il ricaricamento e quindi imposteranno quelle selezioni.

Potete trovare ulteriori informazioni su esattamente come fare tutto questo qui: http://articles.firstclown.us/post/jqgrid-configuration-for-remote-data-loading-with-local-sorting-and-filtering

3

Ho appena notato qualcosa. È possibile utilizzare il parametro loadComplete durante la definizione della griglia.

    loadComplete: function() { 
            // add a function here that waits for a short amount of time, like 100msecs 
            jQuery("#list1").jqGrid('setGridParam', { 
              datatype:'local', 
              sortname:'name', 
              sortorder:'asc', 
              page:1 
            }).trigger("reloadGrid"); 
        } 

Nota che io uso i miei dati a livello locale e quando ho bisogno di un aggiornamento mettere il tipo di dati di nuovo a XML.

Importante: questo di per sé non funzionerà: è necessario attendere un po 'di tempo prima di attivare reloadGrid (eseguendo la linea). Altrimenti non vedrai una differenza nell'output.

1

La mia necessità è di aggiornare/caricare dati remoti, mentre tutte le altre operazioni sono eseguite in locale. Quindi ecco come raggiungo il mio bisogno.

Preparare jqGrid con tipo di dati locale

$("#jqGridView").jqGrid({ 
    //url: originalUrl,// Original line 
    //datatype: "json",// Original line 
    datatype: "local", // For local sorting 
    sortable: true, // I want local sorting for all columns 
    colNames: [...], 
    colModel: [...], 
    //... 
}); 

quindi richiamare questa funzione (ri) Carico/ricerca:

function reloadJqGrid() { 
    var urlForSearch = "xxx"; // modify your search URL (if required) 
    $.get(urlForSearch, function (data) { 
     $("#jqGridView").jqGrid('setGridParam', 
      { 
       datatype: 'local', 
       data: data.Payload //My URL response json is in JSend format, thus storing the array in "data.Payload". You may simply use "data" 
      }) 
      .trigger("reloadGrid"); 
    }); 
} 

Spero che questo aiuto!

Problemi correlati