我有一个简单的DevExpress ASP.MVC GridView,我想在网格中生成数据的PDF导出。我已经研究了如何生成所有数据的导出,但我希望能够只导出出现在网格中的数据。这将允许用户对数据进行排序和过滤,并且只在导出中显示该数据。
排序和过滤似乎都发生在客户端,我搜索了DevExpess文档并检查了客户端网格对象,但找不到我需要的信息。我也尝试过处理网格的客户端事件。我在这里取得的唯一成功是处理ColumnSorting
事件。使用它我可以记录每种排序,但这并不能告诉我排序的方向,以及排序是仅应用于事件中提供的列还是作为多列排序的一部分应用于该列。
我剩下的唯一选择是使用网格外部的其他表单控件来控制排序和过滤。我真的不愿意这样做,因为我的客户非常热衷于内置的排序和过滤功能。
有人可以告诉我如何捕获用户应用的当前排序和过滤设置,以便我可以将它们传递给将产生PDF的控制器操作吗?
答案 0 :(得分:0)
我通过查看其中一个DevExpress示例中的代码来解决这个问题:
http://mvc.devexpress.com/GridView/Editing
Grid的局部视图代码如下:
settings.ClientLayout = (s, e) =>
{
if(e.LayoutMode == ClientLayoutMode.Loading) {
if(Session["GridState"] != null)
e.LayoutData = (string)Session["GridState"];
}
else
Session["GridState"] = e.LayoutData;
};
通过将LayoutData
存储在会话状态中,可以使用相同的代码将其应用于用于生成PDF导出的GridViewSettings
。这解决了我的问题,但我不确定这是多么有用,因为LayoutData
必须解析,因为它的格式类似于以下格式:
page1|sort1|a0|filter[Title] Like '%Test%'|conditions1|1|3|visible9|t0|t1|t2|t3|t4|t5|t6|t7|t8|width9|e|e|e|e|e|e|e|e|e