我遇到麻烦请帮帮我。我想在jqgrid的pager中显示“export to excel”按钮,这将导出搜索jqgrid标准后检索的当前数据集(基于当前过滤器) )。我正在为我的jqgrid使用“loadonce:true”设置。我想在搜索后从jqgrid的本地数据源导出数据。如果不可能,那么当我点击导航的导出按钮时,我怎么能够将参数传递给服务器,搜索条件需要这样做。我使用后端作为servlet。
答案 0 :(得分:3)
我建议您在服务器上实现数据导出,并将当前搜索过滤器发布到后端。有关搜索参数的完整信息定义了jqGrid的postData
参数。 jqGrid search
的另一个布尔参数定义是否应该应用搜索过滤器。您最好忽略_search
参数的postData
属性,并使用jqGrid的search
参数。
有关搜索过滤器的信息格式取决于是否使用了multipleSearch: true
选项。我个人经常使用它。在这种情况下,有关过滤器的完整信息将放在postData
参数:filters
属性的一个属性中。格式描述为here。获取信息的代码如下所示
var $grid = $("#list"),
isFilterAreUsed = $grid.jqGrid('getGridParam', 'search'),
filters = $grid.jqGrid('getGridParam', 'postData').filters;
如果您不使用multipleSearch: true
选项,则无法使用复杂的过滤器,有关过滤器的信息将放在postData
参数的三个属性中:searchField
,searchOper
和searchString
。
答案 1 :(得分:0)
根据Oleg的回答,可以使用
javascript代码:
$("#grid").jqGrid('navButtonAdd', '#grid_toppager', {
caption: "Excel",
buttonicon: "ui-icon-save",
onClickButton: function () {
document.forms['_export']._buffer.value = $("#grid").jqGrid('getGridParam', 'postData');
document.forms['_export'].submit();
}
});
的Index.aspx:
<form id='_export' method="post" action='<%= Url.Action( "Export", "Grid", new { _entity= Model.Name } ) %>'>
<input type="hidden" name="_buffer" id="_buffer" value="" />
</form>
控制器:
public ActionResult Export(string _entity, string _sidx, string _sord, string filters ) {
string where = "";
if (!string.IsNullOrEmpty(filters))
{
var serializer = new JavaScriptSerializer();
Filters filtersList = serializer.Deserialize<Filters>(filters);
where = filtersList.FilterObjectSet(entity);
}
if (string.IsNullOrEmpty(where))
where = " TRUE ";
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls");
Response.ContentType = "application/excel";
Response.Write(GetAllData(_entity, _sidx, _sord, where));
Response.End();
return View("Index");
}
控制器中的过滤器参数具有空值。不知道哪种方法可以将过滤器和排序参数传递给Export方法。