我有一个 asp.net-MVC网页,我在前端使用jqgrid。 我想要一个导出到 Excel 按钮,该按钮将导出当前数据集(基于当前过滤器)。
我已经使用了工具栏过滤器,所以我看到过滤器设置存储在 POST 数据中,但我无法弄清楚如何创建一个将所有过滤器设置/规则从 JQGid 传递到服务器的方法。
谷歌搜索后,我看到了一堆 jqgrid"导出到 Excel"示例,但与此示例类似,它们似乎都没有将过滤器信息传递到服务器端。
您可以将隐藏字段放在"导出到 Excel"表单中:
@using (Html.BeginForm(new { action = "ExportToExcel" }))
{
@Html.Hidden("sidx")
@Html.Hidden("sord")
@Html.Hidden("page")
@Html.Hidden("rows")
<table id="list"></table>
<input type="submit" value="Export to Excel" />
}
并在提交表单时根据当前值填充它们:
$('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);
});
这样,ExportToExcel
控制器操作将采用这些参数并能够筛选列表。
我所做的是在每次请求数据时将 gridstate 放入缓存中,然后使用 gridState 导出到 excel。 在jqGrid站点的某个地方有这样的例子:
//this fragment in GetData method
Session["ExceptionGridState"] = gridModel.ExceptionGrid.GetState(true);
然后,当调用导出时:
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(),
String.Format("SomeDatasetName_Filtered_{0:yyyymmddhhmm}.xls",
DateTime.Now),
gridState);
return View();
}
这对我有用。
我成功地进行了过滤导出,从上面的格雷格解决方案中汲取了灵感@simpatric。
当请求数据时,我为每个网格参数设置一个会话变量,然后再次将它们传递给 excel 导出服务。Greg的解决方案可以与MVC一起使用 asp.net 这对于主要问题来说是可以的。以下解决方案也可以与标准纯 js jqgrid 一起使用:
控制器电网动作
...
Session["jqsidx"] = sidx;
Session["jqsord"] = sord;
Session["jqpage"] = page;
Session["jqrows"] = rows;
Session["jq_search"] = _search;
Session["jqfilters"] = filters;
....
在 EXCEL 导出操作^^内部召回
string sidx = Session["jqsidx"] as String;
string sord = Session["jqsord"] as String;
int? page = Session["jqpage"] as Nullable<Int32>;
int? rows = Session["jqrows"] as Nullable<Int32>;
bool? _search = Session["jq_search"] as Nullable<bool>;
string filters = Session["jqfilters"] as String;
var query = myqueryservice.getGridData(sidx, sord, (int)page, (int)rows, (bool)_search, filters, urlparams).ToList();
...
我希望这可能会对其他在使用标准 jqgrid 时遇到相同问题的人有所帮助。