0

現在、DBからデータを取得し、JSONデータをJQGRIDに返すjqgridを実装しています。

JQGrid 呼び出し

        rowNum: 10,
        rowList: [5, 10],
        url: "/Home/GetDataFromEntity"

C# から返されるデータ

return Json(result, JsonRequestBehavior.AllowGet);

ページに10個のレコードがあり、その10個のレコードのみをDBから取得したい場合、次のページをクリックすると、次の10個のデータを取得したいのは、データが巨大な場合、すべてのデータをメモリに入れたくないからです。パフォーマンスヒットになると思います。

どうすればこれを実装できますか?

ありがとう

4

3 に答える 3

1

これはかなり簡単です。基本的に、ページングを実装するだけで済みます。表示するデータのページを DB に要求するだけです。jqGrid がこの情報をコントローラーに提供するので、データを取得するときに使用できます。

コントローラーは、次のような方法でこのデータを取り込みます (バックエンドの技術スタックがわからないため、ここに C# コードを示します)。

public ActionResult GridDataFetch(string sidx, string sord, int page, int rows, bool _search, string filters)
{
....

次に、データを取得するときに、データセット全体を取得することなく、ユーザーが必要とするデータのページをデータベースに問い合わせることができます。これは見た目よりも複雑になる可能性がありますが、基本的なことは次のように単純です (これも C# コードです)。

var pagedQuery = dataset.OrderBy(sidx + " " + sord).Skip((page - 1) * rows).Take(rows);

上記のように、ユーザーが指定し、jqGrid がsidx&と共に渡された方法でデータを並べ替えます。sord次に、関心のあるページの前にあるすべてのレコードを を介してスキップし、関心のあるskipを取得rowsします。これもまた、は、データのページを取得するための C# メソッドでしたが、どのようなセットアップでも基本はそこにあるはずです。補足として、グリッドまたは他のロジックを介してフィルタリングを行う場合、この呼び出しの前にデータセットをフィルタリングしたことになります。

次に、JSON で通常行うのと同じように、このページ化されたクエリを渡します。

于 2013-03-13T12:37:11.543 に答える
0

これを実現するには、実装する必要がありますserver side pagination

私はこのようにJavaで実装しました:(あなたはc#を使用しています)

int limit = Integer.parseInt(request.getParameter("rows")); // get how many rows we want to have into the grid
String sidx = request.getParameter("sidx"); // get index row - i.e. user click to sort
String sord = request.getParameter("sord"); // get the direction
int start = (limit* page) - limit;
String rows = request.getParameter("rows");

String query = "select * from ( select a.*, ROWNUM rnum from ( select * from CRM_PROT_STAGES  where  PROTOCOL_ID = '"+param +"' ) a where ROWNUM <= "+ limit +")where rnum  >="+start;

上記のパラメータを使用してから、上記のように条件をクエリに入れます

于 2013-03-13T12:32:40.673 に答える
0

同じためにページングを使用する必要があります。サーバー側で.Takeとメソッドを使用できます.Skip

結果セットを取得したら、次のように実行できます

var smallResultSet = fullResultSet.Skip(request.PageIndex * request.RecordsCount).Take(request.RecordsCount).ToList();

fullResultSetここでは、結果セットをフィルタリングして に保存するよりも、結果セットを変数にフェッチしていると仮定しましたsmallResultSet。グリッドをコントローラーアクションにバインドすると、リクエストパラメーターが渡されます。

その後、反復しsmallResultSetて JSONResult を作成します。

于 2013-03-13T12:38:04.780 に答える