2013-04-05 9 views
5

Sto cercando di ricaricare un jqGrid con nuove righe, colNames e colModel. I dati di riga sembrano caricarsi bene ma le colonne non sembrano essere aggiornate. Ho provato a utilizzare GridUnload e GridDestroy ma alla fine ho perso completamente l'istanza DOM jQuery e non carichi più alcun dato.jqGrid reloadGrid e aggiornare nuovi colModel e colNames

var grid = $('#my-grid'); 

if(grid[0].grid == undefined) { 
    grid.jqGrid(options); 
} else { 
    grid.setGridParam(options); 
    grid.trigger('reloadGrid'); 
} 

L'istanza della griglia è importante perché verrà passata ad altri oggetti come parametro. Questi oggetti possono attaccare ascoltatori o eventi trigger.

Sto utilizzando la versione 4.4.2

risposta

0

Sembra che jqGrid rimuova il <table></table> iniziale dal DOM e lo sostituisca o dimentichi il riferimento (non l'ho visto così difficile).

modo da avere a riselezionare la nuova ogni tabella che si desidera creare un nuovo esempio di griglia. $('table#my-grid'). Ciò rende complicato il passaggio di un riferimento della tabella della griglia ad altre parti della tua app come parametro.

mio lavoro intorno comporta eliminando il riferimento di griglia e sostituendo div avvolto della griglia con la tabella originale. quindi creando un jqGrid in modo normale con il nuovo colModel e colNames.

grid.empty(); 
delete grid[0].grid; 
$('#gbox_my-grid').replaceWith(grid); 
grid.jqGrid(options); 

Non è la più ordinata delle soluzioni ma non mi consente di tenere un riferimento permanente all'originale <table>. Sono incerto su come gli altri plugin di jqGrid saranno influenzati da questo però.

Modifica

si scopre jQuery DataTables è più adatto per la personalizzazione e abbiamo adottato questo invece di utilizzare jqGrid.

5

reloadGrid ricarica solo il corpo della griglia e non cambia le intestazioni delle colonne che verranno creati quando la griglia è stato creato.

Se avete bisogno di cambiare il numero di colonne o per utilizzare colNames e colModel sul luogo di vecchia griglia avete o ricreare griglia. È possibile utilizzare prima il metodo GridUnload e quindi creare una nuova griglia (chiamare grid.jqGrid(data) nel proprio caso). È importante che se si memorizzi il selettore jQuery nella griglia in una variabile come grid nel codice, è necessario assegnare grid ancora una volta dopo la chiamata di GridUnload, quindi è necessario fare qualcosa come grid = $("#grid"); direttamente dopo la chiamata di GridUnload.

Vedere the answer per ulteriori dettagli e l'esempio di codice.

+0

come detto usando GridUnload() prima di utilizzare jqGrid() non ha funzionato e quando ha cercato un secondo tipo getta 'TypeError: d.emptyRows è null' in jQuery – gawpertron

+0

@gawpertron: Suppongo che lo si utilizza in un modo sbagliato. È possibile verificare che la demo dalla risposta referenziata funzioni senza problemi in jqGrid 4.4.2 o 4.4.4. Suppongo che tu non riassegni il valore di 'grid' dopo l'uso di' GridUnload' come descritto nella mia risposta. Se hai problemi dovresti * aggiungere la tua domanda con il ** codice ** corrente che usi *. – Oleg

+0

@gawpertron: vedere [la risposta] (http://stackoverflow.com/a/9472895/315935). – Oleg

1

ho combinato entrambe le risposte e ha apportato alcune modifiche al fine di avere farlo funzionare.

var grid = $('#tableID'); 

if(grid[0].grid == undefined) { 
    grid.jqGrid(options); 
} else { 
    delete grid; 
    $('#tableID').GridUnload('#tableID'); 
    $('#tableID').jqGrid(options); 
}