【发布时间】:2012-01-03 21:38:08
【问题描述】:
我遇到麻烦请帮帮我。我想在 jqgrid 的寻呼机中显示“导出到 excel”按钮,该按钮将导出在 jqgrid 搜索条件后检索的当前数据集(基于当前过滤器)。我正在为我的 jqgrid 使用“loadonce:true”设置。现在我想在搜索后从 jqgrid 的本地数据源导出数据。如果不可能,那么当我单击需要执行搜索条件的导航的导出按钮时,我如何能够将参数传递给服务器。我将后端用作 servlet。
【问题讨论】:
我遇到麻烦请帮帮我。我想在 jqgrid 的寻呼机中显示“导出到 excel”按钮,该按钮将导出在 jqgrid 搜索条件后检索的当前数据集(基于当前过滤器)。我正在为我的 jqgrid 使用“loadonce:true”设置。现在我想在搜索后从 jqgrid 的本地数据源导出数据。如果不可能,那么当我单击需要执行搜索条件的导航的导出按钮时,我如何能够将参数传递给服务器。我将后端用作 servlet。
【问题讨论】:
我建议您在服务器上实现数据导出,并将当前搜索过滤器发布到后端。搜索参数的完整信息定义了 jqGrid 的postData 参数。 jqGrid 的另一个布尔参数search 定义是否应该应用搜索过滤器。你最好忽略postData参数的_search属性,使用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 和@ 987654335@.
【讨论】:
filters,而不是如何将信息传递到某处。此外,我没有看到 Bhagwat 的问题发生了变化,也看不到任何测试用例。你应该更清楚地解释你的意思。
根据 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();
}
});
索引.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 方法的正确方法。
【讨论】:
alert 验证$("#grid").jqGrid('getGridParam', 'postData') 为您提供了您需要的信息?
alert($("#grid").jqGrid('getGridParam', 'postData').filters) 返回{"groupOp":"AND","rules":[{"field":"Klient_nimi","op":"cn","data":"emil"}]}
HandleJsonExceptionAttribute 用作[HandleError] 属性的替换。您可以将 Export 操作放在另一个控制器中,并在案例中使用 HTML 而不是 json 内容。您还可以直接在 Export 操作中提供有关错误的 HTML 内容。所以我认为你应该只更改Export 操作中的错误报告。