Servlets 将jqgrid筛选数据导出为excel或CSV
我遇到了麻烦,请帮助我。我想在jqgrid的页面中显示“导出到excel”按钮,该按钮将导出当前数据集,该数据集是在搜索jqgrid的条件后检索的(基于当前过滤器)。我正在为我的jqgrid使用“loadonce:true”设置。现在我想在搜索后从jqgrid的本地数据源导出数据。如果这是不可能的,那么当我点击搜索条件需要执行的导航的导出按钮时,我如何能够将参数传递给服务器。我将后端用作servlet 我建议您在服务器上实现数据导出,只需将当前搜索筛选器发布到后端即可。关于搜索参数的完整信息定义了jqGrid的Servlets 将jqgrid筛选数据导出为excel或CSV,servlets,jqgrid,Servlets,Jqgrid,我遇到了麻烦,请帮助我。我想在jqgrid的页面中显示“导出到excel”按钮,该按钮将导出当前数据集,该数据集是在搜索jqgrid的条件后检索的(基于当前过滤器)。我正在为我的jqgrid使用“loadonce:true”设置。现在我想在搜索后从jqgrid的本地数据源导出数据。如果这是不可能的,那么当我点击搜索条件需要执行的导航的导出按钮时,我如何能够将参数传递给服务器。我将后端用作servlet 我建议您在服务器上实现数据导出,只需将当前搜索筛选器发布到后端即可。关于搜索参数的完整信息定义
postData
参数。jqGridsearch
的另一个布尔参数定义是否应用搜索过滤器。最好忽略postData
参数的\u search
属性,并使用jqGrid的search
参数
有关搜索筛选器的信息格式取决于是否使用usedmultipleSearch:true
选项。我个人经常使用它。在这种情况下,有关筛选器的完整信息将放在postData
参数:filters
属性的一个属性中。描述了该格式。获取信息的代码如下所示
var $grid = $("#list"),
isFilterAreUsed = $grid.jqGrid('getGridParam', 'search'),
filters = $grid.jqGrid('getGridParam', 'postData').filters;
如果不使用
multipleSearch:true
选项,将无法使用复杂筛选器,有关筛选器的信息将放置在postData
参数的三个属性中:searchField
,searchOper
和searchString
根据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");
}
公共操作结果导出(字符串实体、字符串sidx、字符串排序、字符串筛选器){
字符串,其中=”;
如果(!string.IsNullOrEmpty(筛选器))
{
var serializer=新的JavaScriptSerializer();
过滤器过滤器列表=序列化程序。反序列化(过滤器);
其中=filtersList.FilterObjectSet(实体);
}
if(string.IsNullOrEmpty(where))
其中=“TRUE”;
Response.ClearContent();
AddHeader(“内容处置”、“附件;文件名=MyExcelFile.xls”);
Response.ContentType=“应用程序/excel”;
Write(GetAllData(_entity,_sidx,_sord,where));
Response.End();
返回视图(“索引”);
}
控制器中的filters参数具有空值。不知道哪种方法是将过滤器和排序参数传递给导出方法的正确方法。嗨,Oleg,我已经按照您指定的方式完成了,现在可以使用了。我已经将您的代码放在自定义导航按钮的onClickButton事件中,在获得过滤器元素后,我通过ajax调用servlet方法,该方法提供excel文件。谢谢你的回复,这节省了我很多的时间。@Bhagwat:我很高兴知道我能帮助你。不客气@奥列格:我试过你的答案,但过滤器没有通过。我更新了Bhagwat问题并添加了testcase@Andrus:您在“过滤器未通过”下的意思是什么?我只描述了如何获得当前使用的
过滤器,而不描述如何将信息传递到某个地方。此外,我没有看到Bhagwat的问题被改变,也没有看到任何测试用例。你应该更清楚地解释你的意思。@Oleg:看起来编辑版还没有出版,也许等版主来吧。我添加了描述这个问题的答案。为什么不直接使用jQuery.ajax将数据发布到服务器?您是否使用警报
验证$(“#网格”).jqGrid('getGridParam','postData')
获取您需要的信息?@Oleg:我需要在单独的选项卡中打开excel结果,或提示用户下载xls文件。Ajax不支持此功能。alert($(“#grid”).jqGrid($(“#grid”).filters)
返回{“groupOp”:“AND”,“rules”:[{“field”:“Klient_nimi”,“op”:“cn”,“data”:“emil”}]}
我个人在直接设置窗口位置时使用的设置(请参见或)。例如window.location=myServerBaseUrl/Export+'?filters='+encodeURIComponent(filters)
在onClickButton
的内部。谢谢,它起作用了。如果导出控制器抛出excepton,它将返回错误消息作为json内容。在这种情况下,浏览显示“未找到”页面。用户没有看到错误消息。在中,我演示了如何定义类HandleJsonExceptionAttribute
作为[HandleError]
属性的替换。您可以在另一个控制器中放置Export
操作,并在案例中使用HTML而不是json内容。您还可以在导出
操作中直接提供出错时的HTML内容。因此,我认为您应该更改导出
操作中的错误报告。