jqgrid +用新数据刷新网格

时间:2013-03-13 13:16:45

标签: c# jquery ajax jqgrid webmethod

我有一个带有jqgrid的web应用程序,使用jquery ajax填充数据,调用webmethod。 jqgrid每5秒刷新一次以轮询数据。我想做的是获取每5秒添加到表中的新数据。

所以我想我会修改我的webmethod,从最后一次ID读取开始,分批获取20个数据。我认为在web方法中我会做一个计数器,firstRecordID,lastRecordIDRead变量,如果counter = 0我将获得第一个记录ID并将其存储在firstRecordID中,如果counter大于0,则firstRecordID将是lastRecordIDRead(firstRecordID + 20)。因此,如果数据库中的第一个ID是906,则在第一次轮询时它将从906到925获得记录,然后在第二次轮询中它将从926 + 20个其他记录获得并继续这样。

当在控制台应用程序中使用此方法作为示例时它工作正常,但是我无法理解在使用Web服务时应该如何实现这一点,因为Web服务是无状态的我不知道我应该如何实现计数器变量请问有什么想法吗?或者可能是更好的解决方案?

非常感谢。

2 个答案:

答案 0 :(得分: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.
          ...

答案 1 :(得分:0)

如果我理解你的问题是对的。我想你可以做的是在数据中获取ID并保留在jqGrid中的隐藏列中。在您的页面中再保留一个隐藏控件,将其初始值保持为0.在您的服务调用中,将隐藏控件中的值作为参数发送。

在服务器端检查值是否为0,获取前20行并发回。例如,您从906到925获取行并发回。关于ajax调用的成功。在隐藏控件中保存925。所以现在进行第二次调用时,它将发送隐藏控件的值,现在将是925,然后在服务器端,您可以从926到945获取行。再次将945存储在隐藏控件中,因此第三次发送的值将是945。这样,您可以在每个服务调用中保存最后一个Id,并将该id作为参数发送并获取下一行。