JQGred,导出到 Excel(使用当前过滤器发布数据)在 asp.net-MVC 站点中



我有一个 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 时遇到相同问题的人有所帮助。

最新更新