1

我有一个 JqGrid,我需要将大约 10Mb 的数据作为 json 发送给它以填充网格。我将 Json 作为内容结果发送,如下所示:

    public ContentResult GetDynamicColumnData(int? fieldListId)
    {
        var serializer = new JavaScriptSerializer();
        serializer.MaxJsonLength = Int32.MaxValue;

        IList<FieldListView> fieldListValues = null;
        if (fieldListId != null)
        {
            fieldListValues = fieldListService.GetFieldListValues(fieldListId.Value);
        }
        var resultData = new { fieldListValues };
        var result = new ContentResult
        {
            Content = serializer.Serialize(resultData),
            ContentType = "application/json"
        };
        return result;
    }

名为 fieldListvalues 的列表有大约 50000 个对象。问题是我的 Jqgrid 需要大约 3 分钟才能在 Chrome 中加载,而它根本没有在 Firefox 中加载。

那么将大量数据发送到客户端并将其呈现在网格中的最佳方式是什么?

4

3 回答 3

0

答案是真的不要这样做。如此多的数据将使网格本身难以与如此多的行一起使用。您可以将 jqGrid 配置为分页。您需要将 C# 中的方法签名设置为类似

public ContentResult GetDynamicColumnData(int? fieldListId, 
                                 string sidx, string sord, 
                                 bool _search, string searchField, 
                                 string searchOper, string searchString, 
                                 int page = 1, int rows = 100)

然后,您可以遍历您的字段列表值,跳过 pageIndex * pageSize 的总数,它应该会提供良好的用户体验。

当我这样做时,我发现这篇Phil Haack文章是一个很好的起点。我还发现这是一个有用的例子

您可以使用 _search 和 search 操作数通过允许进一步过滤网格来提供积极的用户体验。因为这个搜索是动态的,所以我通过构建 Predicates 来实现它,然后将其应用于 LINQ 表达式。

于 2012-05-17T09:09:23.540 回答
0

我建议分页。

您还可以使用增量数据加载。这样您就可以继续获取更多记录,但用户能够看到屏幕并使用当前数据集。

于 2012-05-17T09:04:01.593 回答
0

您需要在滚动/分页(我相信 JqGrid 实现)上实现数据的自动加载,以便网格只请求用户“可查看”的行数的数据。一次将 10MB 的数据加载到网格中是行不通的。我会质疑为什么用户实际上一次需要这么多的数据。您可以通过预过滤等方式减少数据量。

于 2012-05-17T09:04:34.780 回答