2010-10-14 3 views
19

Come si può creare una griglia ma non caricare alcun dato?jqGrid: come impostare la griglia su NON caricare inizialmente tutti i dati?

Se ometto l'opzione url, viene attivata la richiamata loadError.

Attualmente impostiamo url:NoData.json dove NoData.json è un file statico senza righe in esso.

Il problema è nella nostra chiamata loadComplete e vorremmo visualizzare un messaggio se la griglia non contiene dati, eccetto che non vogliamo visualizzare questo messaggio sul carico iniziale. Attualmente abbiamo gestisce questo come segue:

//jqGrid load complete handler 
function loadComp(grid) { 
    if (grid.getGridParam("url") != "NoData.json" && grid.getGridParam("records") == 0) { 
     setStatus("Your search did not return any results"); 
    } 
} 

Questo sembra solo un po 'hacky .. vorrebbe avere solo la griglia non caricare alcun dato inizialmente.

Qualche idea?

risposta

31

Dovresti semplicemente usare datatype: 'local' inizialmente. Nel momento in cui è necessario caricare i dati è necessario modificare la datatype a json o xml:

$("#list").jqGrid('setGridParam',{datatype:'json'}).trigger('reloadGrid'); 
+0

Provato che - problema è con 'datatype: local' e no' url', il mio callback 'loadComplete' è ancora chiamato. Speravo in un approccio che non attivasse la richiamata - o almeno un modo più pulito nel callback per determinare che questa è l'ora iniziale in cui viene caricata la griglia. –

+4

@Marcus: di causa l'handle di evento 'loadComplete' sarà chiamato in tutte le situazioni. Se vuoi mostrare un messaggio solo in caso di caricamento dal server, puoi visualizzare il messaggio solo se 'datatype' è uguale a" json "come in http://stackoverflow.com/questions/3564898/jqgrid-programatically-select -grid-row/3571392 # 3571392 – Oleg

+2

La soluzione 'grid.getGridParam ('datatype') ===" json "' ha funzionato bene .. –

18

ho voluto creare una griglia che carica i dati non quando la pagina viene caricata, ma carica i dati, quando l'utente fa clic aggiorna o usa la ricerca. La mia soluzione è un po 'hacky ma è molto semplice e funziona bene.

Sto utilizzando l'evento di richiamata loadBeforeSend per interrompere la richiesta di dati Ajax quando la pagina viene caricata. La mia funzione di callback si rimuove da sola, quindi verrà eseguita solo una volta.

loadBeforeSend: function (xhr, settings) { 
    this.p.loadBeforeSend = null; //remove event handler 
    return false; // dont send load data request 
} 
+0

Dove posso andare a votare per 20 volte? –

+0

Perché questa non è la risposta che ho usato su tutte le mie griglie (quelle che non hanno bisogno di caricare) –

+0

Proprio quello che stavo cercando, grazie! – masterwok

-2

Non impostare l'URL quando si inizializza la griglia. Imposta URL appena prima di caricare la griglia utilizzando la funzione setGridParam.

Funziona per me.