【问题标题】:jqgrid + refresh grid with new datajqgrid + 用新数据刷新网格
【发布时间】:2013-03-13 13:16:45
【问题描述】:

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

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

当在控制台应用程序中使用此方法作为示例时,它工作得很好,但是我不明白在使用 web 服务时我应该如何实现它,因为 web 服务是无状态的,我不知道我应该如何实现计数器变量等等。请问有什么想法吗?或者也许是更好的解决方案?

非常感谢。

【问题讨论】:

    标签: c# jquery ajax jqgrid webmethod


    【解决方案1】:

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

    【讨论】:

    • 所以为了得到 KeyValue 的值我会按照拉曼的建议做吗?将成功时来自 webmethod 的值存储到隐藏字段,然后使用 postData 传递它,如下所示:postData: { 'KeyName': function () { return $("txtRecordID").val(); } },
    • 不需要使用隐藏字段,可以很方便地存储在jqGrid中。如果您想检索它,您可以通过以下方式访问它:$('#gridName').jqGrid('getGridParam', 'postData.KeyName')
    • 请问您为什么要检索它?当您调用网格的刷新时,您可以在该点增加值。例如$('#gridName').jqGrid('setGridParam', { postData: { KeyName: KeyValue + intValue} }).trigger('reloadGrid');
    • 啊,好的,谢谢,但是第一次在文档加载时加载网格,postdata 参数将为空,知道我应该如何处理这个
    • 是的,只需将其作为网格设置的一部分设置为 0。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-20
      • 1970-01-01
      • 1970-01-01
      • 2014-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      相关资源
      最近更新 更多