jqgrid, exportation vers Excel (avec les données de filtre actuelles) dans un site asp.net-mvc

J’ai une page Web asp.net-mvc et j’utilise jqgrid au début. Je veux avoir un bouton d’exportation vers Excel qui exportera le jeu de données actuel (basé sur le filtre actuel).

J’utilise déjà le filtre de la barre d’outils pour que je voie que les parameters du filtre sont stockés dans les données post, mais je ne vois pas comment créer une méthode qui transmettra tous les parameters / règles du filtre au serveur à partir de jqgrid.

Je vois un tas de jqgrid “export to excel” exemple après googler, mais semblable à cet exemple , aucun d’entre eux ne semble transmettre les informations de filtre au serveur.

Vous pouvez insérer des champs cachés dans le formulaire Exporter vers Excel:

 @using (Html.BeginForm(new { action = "ExportToExcel" })) { @Html.Hidden("sidx") @Html.Hidden("sord") @Html.Hidden("page") @Html.Hidden("rows") 
}

et les renseigner lors de la soumission du formulaire en fonction des valeurs actuelles:

 $('form').submit(function () { var grid = $('#list'); var sortname = grid.getGridParam('sortname'); var sortorder = grid.getGridParam('sortorder'); var page = grid.getGridParam('page'); var rows = grid.getGridParam('rowNum'); $('#sidx').val(sortname); $('#sord').val(sortorder); $('#page').val(page); $('#rows').val(rows); }); 

De cette façon, l’action du contrôleur ExportToExcel prendra ces parameters et pourra filtrer la liste.

Ce que j’ai fait est de mettre le gridstate dans le cache chaque fois que des données sont demandées, puis je fais l’exportation pour excel en utilisant le gridState. Il existe des exemples de cela quelque part sur le site jqGrid:

 //this fragment in GetData method Session["ExceptionGridState"] = gridModel.ExceptionGrid.GetState(true); 

Ensuite, lorsque l’exportation est appelée:

 public ActionResult ExportToExcel_CurrentData() { var gridModel = new ExceptionJqGridModel(); var grid = gridModel.ExceptionGrid; // call the ExportToExcel built-in method JQGridState gridState = Session["ExceptionGridState"] as JQGridState; gridState.CurrentPageOnly = false; grid.ExportToExcel(SourceQuery(), Ssortingng.Format("SomeDatasetName_Filtered_{0:yyyymmddhhmm}.xls", DateTime.Now), gridState); return View(); 

}

Cela fonctionne pour moi.

J’ai réussi à faire une exportation filtrée en m’inspirant de la solution ci-dessus @simpasortingc greg.

J’ai défini une variable de session pour chaque paramètre de grid, lorsque les données sont demandées, puis les repassant au service d’exportation Excel. La solution de Greg peut fonctionner avec asp.net MVC, ce qui convient pour la question principale. La solution suivante pourrait également être utilisée avec js jqgrid pur:

ACTION SUR LA GRILLE DU CONTRÔLEUR

  ... Session["jqsidx"] = sidx; Session["jqsord"] = sord; Session["jqpage"] = page; Session["jqrows"] = rows; Session["jq_search"] = _search; Session["jqfilters"] = filters; .... 

RAPPELÉ À L’INTÉRIEUR D’UNE ACTION EXCELL EXPORTATION

  ssortingng sidx = Session["jqsidx"] as Ssortingng; ssortingng sord = Session["jqsord"] as Ssortingng; int? page = Session["jqpage"] as Nullable; int? rows = Session["jqrows"] as Nullable; bool? _search = Session["jq_search"] as Nullable; ssortingng filters = Session["jqfilters"] as Ssortingng; var query = myqueryservice.getGridData(sidx, sord, (int)page, (int)rows, (bool)_search, filters, urlparams).ToList(); ... 

J’espère que cela pourra aider d’autres personnes ayant le même problème avec jqgrid standard.