Come implementare la ricerca su jqgrid?

Quindi ho un esempio di base di jqgrid che funziona in ASP.NET MVC, il javascript si presenta così:

$(document).ready(function() { $("#list").jqGrid({ url: '../../Home/Example', datatype: 'json', myType: 'GET', colNames: ['Id', 'Action', 'Parameters'], colModel: [ { name: 'id', index: 'id', width: 55, resizable: true }, { name: 'action', index: 'action', width: 90, resizable: true }, { name: 'paramters', index: 'parameters', width: 120, resizable: true}], pager: $('#pager'), rowNum: 10, rowList: [10, 20, 30], sortname: 'id', sortorder: 'desc', viewrecords: true, multikey: "ctrlKey", imgpath: '../../themes/basic/images', caption: 'Messages' }); 

Ora sto cercando di implementare il pulsante di ricerca che hanno negli esempi di jqgrid (fai clic su Manipulation / Grid Data). Ma non vedo come lo attuano. Mi aspetto ad es. Una “ricerca: vera” e un metodo per implementarla.

Qualcuno ha implementato la ricerca su jqgrid o conosce degli esempi che mostrano esplicitamente come farlo?

Recentemente l’ho implementato io stesso (ieri in realtà) per la prima volta. L’ostacolo più grande per me è stato capire come scrivere la funzione del controller. La firma della funzione è ciò che mi ha portato più tempo a capire (notare i parametri _search, searchField, searchOper e searchString come quelli mancanti dalla maggior parte degli esempi di asp.net mvc che ho visto). Il javascript invia al controller sia il carico iniziale che la chiamata di ricerca. Vedrai nel codice che sto verificando se il parametro _search è vero o no.

Di seguito è riportato il controller e il codice javascript. Le mie scuse per eventuali problemi di formattazione come questa è la mia prima volta la pubblicazione qui.

 public ActionResult GetAppGroups(string sidx, string sord, int page, int rows, bool _search, string searchField, string searchOper, string searchString) { List groups = service.GetAppGroups(); List results; if (_search) results = groups.Where(x => x.Name.Contains(searchString)).ToList(); else results = groups.Skip(page * rows).Take(rows).ToList(); int i = 1; var jsonData = new { total = groups.Count / 20, page = page, records = groups.Count, rows = ( from appgroup in results select new { i = i++, cell = new string[] { appgroup.Name, appgroup.Description } }).ToArray() }; return Json(jsonData); } 

Ed ecco il mio HTML / Javascript:

 $(document).ready(function() { $("#listGroups").jqGrid({ url: '<%= ResolveUrl("~/JSON/GetAppGroups/") %>', datatype: 'json', mtype: 'GET', caption: 'App Groups', colNames: ['Name', 'Description'], colModel: [ { name: 'Name', index: 'Name', width: 250, resizable: true, editable: false}, { name: 'Description', index: 'Description', width: 650, resizable: true, editable: false}, ], loadtext: 'Loading Unix App Groups...', multiselect: true, pager: $("#pager"), rowNum: 10, rowList: [5,10,20,50], sortname: 'ID', sortorder: 'desc', viewrecords: true, imgpath: '../scripts/jqgrid/themes/basic/images' //}); }).navGrid('#pager', {search:true, edit: false, add:false, del:false, searchtext:"Search"}); 

Vedi il mio articolo su codeproject, che spiega come possiamo eseguire più ricerche in jqgrid:

Utilizzando la barra degli strumenti di ricerca di jqGrid con più filtri in ASP.NET MVC

Uso IModelBinder per il binding delle impostazioni della griglia, alberi di espressione per l’ordinamento e il filtraggio dei dati.

Nel caso ti stia ancora chiedendo di gestire i parametri opzionali, dichiarali semplicemente come annullabili aggiungendo un ? dopo il nome del tipo.

Ora sarai in grado di confrontarli con null per verificare se sono assenti.

Si noti che non è necessario eseguire questa operazione con le stringhe poiché sono già annullabili.

@Alan – ok, ho usato il tuo metodo e ho esteso il mio webservice per aspettarmi quei tre parametri aggiuntivi e controllare “_search” è vero / falso. Ma, per fare in modo che funzionasse, ho dovuto aggiungere questo alla mia chiamata ajax in JavaScript:

 if (!postdata._search) { jQuery("#mygrid").appendPostData( {searchField:'', searchOper:'', searchString:''}); } 

Segui questo link . Ha spiegato tutte le implementazioni …

È ansible creare un pulsante searchBtn e richiamare il modulo di ricerca al clic

 $("#searchBtn").click(function(){ jQuery("#list4").searchGrid( {options} )});