0

webmethod を呼び出す jquery ajax を使用してデータが取り込まれた jqgrid を備えた Web アプリがあります。jqgrid は、データをポーリングするために 5 秒ごとに更新されます。私がやりたいことは、5 秒ごとにテーブルに追加される新しいデータを取得することです。

そこで、最後に読み取った ID から始めて、20 個のバッチでデータを取得するように webmethod を変更すると考えました。私がwebmethodで考えたことは、カウンター= 0の場合、カウンター、firstRecordID、lastRecordIDRead変数を実行し、最初のレコードIDを取得してfirstRecordIDに保存します。カウンターがfirstRecordIDよりも0より大きい場合、lastRecordIDRead(firstRecordID + 20)。したがって、データベースの最初の ID が 906 の場合、最初のポーリングで 906 から 925 までのレコードを取得し、2 回目のポーリングで 926 + 20 の他のレコードから取得し、このように続行します。

このメソッドをコンソールアプリで例として使用するとうまくいきましたが、Webサービスを使用するときにこれを実装する方法がわかりません。Webサービスはステートレスであるため、カウンター変数などを実装する方法がわかりません。アイデアください?それとも、より良い解決策ですか?

どうもありがとう。

4

2 に答える 2

0

Session変数を使用して物事を追跡することもできますが、私の推奨事項は、グリッドにこのカウンター自体を管理させることです。

グリッドに、グリッドが存在するIDの値を含む追加のパラメーターを投稿させるのは非常に簡単です。を介して追加の値を渡すことができます

postData: { KeyName: KeyValue}, 

グリッドを更新するために呼び出している場合(タイマーイベントを介して想定しています)、グリッドを更新するように要求するときに、このパラメーターを更新する場所を追加するだけです。

元:

$('#gridName').jqGrid('setGridParam', { postData: { KeyName: KeyValue} }).trigger('reloadGrid');

コントローラ側では(C#コードを表示しますが、基本は同じです)、この追加の値を評価して、要件に応じてjqGridに返すデータを変更します。

public ActionResult GridData(string sidx, string sord, int page, int rows, bool _search, string filters, string KeyName)
        {
          //logic to change dataset being returned based on KeyName value.
          ...
于 2013-03-13T13:30:45.240 に答える
0

私があなたの質問を正しく理解したなら。私ができることは、データ内のIDもフェッチし、jqGridの非表示の列に保持することだと思います。初期値を0のままにして、ページにもう1つの非表示のコントロールを設定します。サービス呼び出しで、非表示のコントロールの値をパラメーターとして送信します。

サーバー側で、値が0かどうかを確認し、最初の20行をフェッチして送り返します。たとえば、906から925までの行をフェッチして送り返します。ajax呼び出しの成功時。非表示のコントロールで925を保存します。したがって、2回目の呼び出しが発生すると、隠しコントロールの値が925に送信され、サーバー側で926から945までの行をフェッチできます。再び945を隠しコントロールに格納するため、3回目の送信値は945になります。このようにして、すべてのサービス呼び出しで最後のIDを保存し、そのIDをパラメーターとして送信して、次の行をフェッチできます。

于 2013-03-13T13:32:32.277 に答える