Jqgrid +用新数据刷新网格

本文关键字:数据 刷新 网格 新数据 Jqgrid | 更新日期: 2023-09-27 18:03:37

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

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

当这个方法在一个控制台应用程序中使用作为一个例子,它工作得很好,但是我不明白我应该如何去实现这个使用webservice,因为一个webservice是无状态的,我不知道我应该如何实现计数器变量等。有什么想法吗?或者是一个更好的解决方案?

Jqgrid +用新数据刷新网格

您可以使用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.
          ...

如果我没理解错的话。我猜你能做的就是从数据中获取id并保存在jqGrid的隐藏列中。在页面中再添加一个隐藏控件,将其初始值保持为0。在您的服务调用中,将隐藏控件中的值作为参数发送。

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