2013-03-13 180 views
0

我有一個使用jquery ajax調用webmethod的數據填充jqgrid的Web應用程序。 jqgrid每5秒刷新一次以輪詢數據。我想要做的是獲取每5秒添加到表中的新數據。jqgrid +使用新數據刷新網格

所以我想我會修改我的webmethod從最後一次讀取的ID開始獲取20批次的數據。我認爲是在webmethod我會做一個計數器,firstRecordID,lastRecordIDRead變量,如果計數器= 0我會得到第一個記錄ID並將其存儲在firstRecordID,如果計數器大於0 firstRecordID將是lastRecordIDRead(firstRecordID + 20)。因此,如果數據庫中的第一個ID是906,那麼在第一次輪詢時它將從906到925得到記錄,然後在第二次輪詢中它將從926 + 20個其他記錄中獲得並繼續如此。

當在控制檯應用程序中使用此方法作爲示例時,它工作正常,但是我無法理解如何在使用webservice時執行此操作,因爲webservice是無狀態的,我不知道如何實現計數器變量等任何想法請嗎?或者,也許是一個更好的解決方案?

非常感謝。

回答

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. 
      ... 
+0

所以爲了得到KeyValue的價值,我會像拉曼建議的那樣做?將webmethod中的值存儲到成功的隱藏字段中,然後使用postData像下面這樣傳遞它:postData:{KeyName':function(){ return $(「txtRecordID」)。val(); } }, – krafo 2013-03-13 14:38:53

+0

不需要使用隱藏字段,它可以很容易地存儲在jqGrid中。如果你想檢索它,你可以通過'$('#gridName').jqGrid('getGridParam','postData。KeyName')' – Mark 2013-03-13 14:45:27

+0

我可以問你爲什麼要檢索它嗎?當您調用網格刷新時,您可以在該點增加值。例如$('#gridName')。jqGrid('setGridParam',{postData:{KeyName:KeyValue + intValue}})。trigger('reloadGrid');' – Mark 2013-03-13 14:46:53

0

如果我理解你的問題的權利。我猜你可以做的是獲取數據中的ID並保留在jqGrid的隱藏列中。讓頁面中的一個隱藏控件保持其初始值爲0.在您的服務調用中,將隱藏控件中的值作爲參數。

在服務器端檢查值是否爲0獲取前20行並返回。例如,您可以將行從906提取到925併發回。在ajax調用的成功。在隱藏的控制中保存925。所以現在第二次調用會發生,它會發送隱藏控制的值,現在是925,然後在服務器端,您可以從926到945獲取行。再次將945存儲在隱藏控件中,因此第三次發送的值將是945。通過這種方式,您可以將每個服務調用中的最後一個ID保存起來,並將該ID作爲參數發送並獲取下一行。