1

我有一个简单的 DevExpress ASP.MVC GridView,我想生成网格中数据的 PDF 导出。我已经弄清楚如何导出所有数据,但我希望能够只导出出现在网格中的数据。这将允许用户对数据进行排序和过滤,并且只有该数据出现在导出中。

排序和过滤似乎都发生在客户端,我搜索了 DevExpess 文档并检查了客户端网格对象,但找不到我需要的信息。我也尝试过处理网格的客户端事件。我在这里取得的唯一成功是处理ColumnSorting事件。使用它,我可以记录每个排序,但这并不能告诉我排序的方向,以及排序是仅应用于事件中提供的列还是作为多列排序的一部分应用于该列。

我剩下的唯一选择是使用网格外部的其他表单控件来控制排序和过滤。我真的不想这样做,因为我的客户非常热衷于内置的排序和过滤功能。

请有人告诉我如何捕获用户应用的当前排序和过滤设置,以便我可以将它们传递给将生成 PDF 的控制器操作?

4

1 回答 1

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在会话状态中,可以使用相同的代码将其GridViewSettings应用于用于生成 PDF 导出的 。这解决了我的问题,但我不确定这有多大用处,因为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
于 2013-03-01T14:20:37.160 回答