Ottieni tutte le righe non filtrate da jqGrid

Ho dati locali in una griglia. Come posso ottenere tutte le righe o gli ID che non vengono rimossi dopo che un utente utilizza la barra degli strumenti dei filtri? Devo ottenere tutte le righe filtrate, indipendentemente dall’impaginazione.

Ad esempio, supponiamo di iniziare con 50 righe nella griglia. L’utente utilizza la barra degli strumenti del filtro e il set di righe diminuisce a 10 righe. Come posso ottenere quelle dieci file?

Non esiste un modo diretto per ottenere le informazioni di cui hai bisogno. Internamente jqGrid usa $ .jgrid.from per filtrare i dati locali. Il codice principale che utilizza $.jgrid.from all’interno di addLocalData . Per ottenere risultati di cui hai bisogno senza studiare tutto il codice, ti suggerisco di utilizzare il fatto che tutti i dati filtrati verranno restituiti con il metodo select di $.jgrid.from (vedi la riga di codice). Il mio suggerimento è di prendere i dati prima che i dati vengano tagliati alle dimensioni della pagina.

Per farlo suggerisco di usare la sotto-class: sovrascrittura del metodo select method di $.jgrid.from . Dimostro la tecnica negli esempi creati per la risposta e questa .

Nel tuo caso il codice sarà

 var oldFrom = $.jgrid.from, lastSelected; $.jgrid.from = function (source, initalQuery) { var result = oldFrom.call(this, source, initalQuery), old_select = result.select; result.select = function (f) { lastSelected = old_select.call(this, f); return lastSelected; }; return result; }; 

Ora la variabile lastSelected salverà la matrice di elementi che sono risultati dell’ultima operazione di ordinamento o filtraggio. Poiché $.jgrid.from è globale, i dati non sono connessi alla rete. Se hai più di una griglia sulla pagina sarà scomodo. Si può risolvere il piccolo svantaggio con la seguente riga nel codice di loadComplate di ogni griglia:

 loadComplete: function () { this.p.lastSelected = lastSelected; // set this.p.lastSelected } 

Nel modo in cui introduciamo il nuovo parametro lastSelected che avrà la struttura chiusa come parametro dei data , ma conterrà solo gli ultimi dati filtrati .

Il codice seguente mostrerà gli ID dei dati filtrati nel messaggio di alert

 $("#getIds").click(function () { var filteredData = $grid.jqGrid('getGridParam', 'lastSelected'), i, n, ids = [], idName = $grid.jqGrid('getGridParam', 'localReader').id; if (filteredData) { for (i = 0, n = filteredData.length; i < n; i++) { ids.push(filteredData[i][idName]); } alert("tolal number of filtered data: " + n + "\n" + "ids of filtered data:\n" + ids.join(', ')); } }); 

Ho usato il parametro localReader.id perché il nome della proprietà utilizzato per i dati locali è tipicamente id o _id_ . _id_ verrà utilizzato in caso di dati caricati dal server se si utilizza loadonce: true option.

La demo dimostra l'approccio. Se un filtro, ad esempio solo i dati di FedEx e quindi fa clic sul pulsante "Show Ids", verranno visualizzate le informazioni su tutti i filtri e non solo sui dati visualizzati nella pagina corrente:

inserisci la descrizione dell'immagine qui

inserisci la descrizione dell'immagine qui

AGGIORNATO : free jqGrid fornisce la nuova opzione lastSelectedData . Guarda la demo nella lista delle demo .

È ansible utilizzare l’opzione afterSearch della barra degli strumenti di ricerca:

 var filteredIDs = new Array(); //Global variable $("#"+gridId).jqGrid("filterToolbar", { stringResult:true, searchOnEnter:false, afterSearch:function(){ filteredIDs = $("#"+gridId).getDataIDs(); } }); 

Se si desidera ottenere le righe filtrate invece degli ID filtrati, utilizzare getRowData () anziché getDataIDs ().

Tutto, ho trovato un’altra risposta che è molto più facile da includere

 loadComplete: function (gridData) { var isSearchPerformsd = $grid.getGridParam("postData")._search; if (isSearchPerformsd) { $("#spanFilterTotal").text(gridData.records); } 

Tutto quello che vuoi è qui sotto:

 $.each($grid.getRowData(), function( index, value ) { a.push(value["COLUMN_NAME"]); //Get the selected data you want });