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 が Chrome でロードするのに 3 分ほどかかり、Firefox ではまったくロードされないことです。

では、その膨大なデータをクライアント側に送信してグリッドでレンダリングする最良の方法は何でしょうか。

4

3 に答える 3

0

ページネーションを提案します。

増分データ ロードを使用することもできます。より多くのレコードをフェッチし続けますが、ユーザーは画面を見て現在のデータセットを操作できます。

于 2012-05-17T09:04:01.593 に答える
0

スクロール/ページング(JqGridが実装していると思います)でデータの自動ロードを実装して、グリッドがユーザーが「表示できる」行数のデータのみを要求するようにする必要があります。一度に 10MB のデータをグリッドにロードするのはうまくいきません。その量のデータが実際にユーザーによって一度に必要とされる理由を疑問に思います。事前フィルタリングなどにより、データ量を削減できます。

于 2012-05-17T09:04:34.780 に答える
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 オペランドを使用して、グリッドをさらにフィルタリングできるようにすることで、ポジティブなユーザー エクスペリエンスを提供できます。この検索は動的であるため、述語を作成して LINQ 式に適用することで実装しました。

于 2012-05-17T09:09:23.540 に答える