6

次のメソッドを使用して、jqgrid のサブグリッドのデータを取得し、完全に正常に動作しています。

このメソッドは、サーバー側の並べ替えとページングを実装するために使用されることに注意してください。

今私が持っているクエリは、あなたが行で見ることができるようです

List<SomeEntity> myList = _service.GetSomeData(id);ここでデータベース呼び出しが行われ、すべてのレコードがフェッチされます。

よくわからなかったので、これがサーバー側のページングを実装するためのベストプラクティスに含まれているかどうかを知りたかっただけです。

public JsonResult GetData(string folderId, string sidx, string sord, int page, int rows) {
    int id = int.Parse(folderId);
    List < SomeEntity > myList = _service.GetSomeData(id);

    const int pageSize = 5;

    // total
    double totalPages = Math.Ceiling((double) myList.Count() / pageSize);

    // sort
    if (sord == "asc") {
        myList = myList.OrderBy(m = > m.Name).ToList();
    }
    else {
        myList = myList.OrderByDescending(m = > m.Name).ToList();
    }

    // paging
    myList = myList.Skip((page - 1) * pageSize).Take(pageSize).ToList();

    var jsonData = new {
        total = totalPages, records = domainList.Count, page,

        rows = myList
    };

    return Json(jsonData, JsonRequestBehavior.AllowGet);
}​
4

2 に答える 2

3

サービス (_service) からすべてのデータを返し、結果をページングしているようです。また、ページング要求が行われるたびに同じ要求を行うようです。もしそうなら、これは非効率だと思います。

サービス (_service) は、Take and Skip 機能 (パラメーターとして渡す) を処理する必要があります。これにより、フェッチされ、ネットワーク経由で送信されるレコードの数が減ります。GetSomeData(id) メソッドのコードを投稿していません。IEnumerable または IQueryable を返していますか? これは、パフォーマンス/効率にも影響します。

あなたのコードや質問を誤解していないことを願っています。

于 2012-09-21T14:03:06.323 に答える
1

あなたの主な問題は、結果を_service.GetSomeData(id)to に割り当てることですList<SomeEntity>SQL Server 側でソートとペアリングを使用できるようにするには、ObjectQuery<SomeEntity>または(使用するデータベース テクノロジによって異なります) を使用する必要があります。現在のコードは、すべてのデータを取得して並べ替え、次のステートメントで必要なページを取得するだけです。回答のコード、または別の回答のより最近のコードを参照することをお勧めします。jqGrid でデータの並べ替え、ページング、およびフィルタリングを実装する方法の例をご覧ください。IQueryable<SomeEntity>

于 2012-09-21T14:12:08.877 に答える