JQGrid / JSGrid。创建网格后添加其他行(数据库中的大量记录)

JQGrid / JSGrid. Add additional rows after the grid has been created (lot of records in the database)

我有一个查询 returns 大量数据 (json)。这需要很长时间才能将网格呈现给用户。所以我想做的是用过滤器(比如当年的记录)触发初始查询,然后构建网格。

网格已呈现给用户,他可以开始工作了。

与此同时,我触发了第二个查询(在后台)以获取所有其他记录(除当年以外的所有记录)。

现在我想将这些记录添加到已经存在的网格中。在用户不注意的情况下。

这可能吗?

我认为 JSgrid 和 JQgrid 的行为相同,但我使用 JSGrid

谢谢,迈克

只需在您的函数上设置一个延迟计时器即可。我不确定用户是否不会注意到这些变化。但我想这是一个很好的起点。

这里有一个关于如何使用 setTimeout() 的例子;

这将允许您的函数在特定时间后执行。因此,当用户加载 table 并开始工作时。您将触发另一个函数(在一定时间后)重新填充 table。我不确定您的 table 是如何填充的,因此不确定执行是否对用户不可见。

var delayInMilliseconds = 1000; //1 second

   setTimeout(function() {
      //your code to be executed after 1 second
    }, delayInMilliseconds);` 

如果是 Guriddo jqGrid,您可以先加载一小部分数据,然后使用网格完成事件将数据类型设置为本地,加载所有数据并将其放入数据参数并刷新索引。加载变量用于防止在排序分页等情况下重复加载 - 即代码仅执行一次

下面的代码and demo

    var loaded = false;
    $(document).ready(function () {
        $("#jqGrid").jqGrid({
            // url to load initially 10 records
            url: 'grid.php',
            datatype: "json",
....

            gridComplete : function() {
                // if the all the data is not loaded 
                if(!loaded)  {
                    // set the datatype to local
                    this.p.datatype='local';
                    var ts = this;
                    $.ajax({
                        "url": "grid.php",
                        "dataType" : "json",
                        // instruct the server to get all the data with the same sortining
                        "data" : { oper: 'grid', page:1, totalrows : -1, sidx : 'CustomerID', sord : 'asc' },
                        success :function( resp ) {
                            // when loaded  simple attach the response data to data array
                            ts.p.data = resp.rows;
                            // refresh the indexes
                            ts.refreshIndex();
                            // mark that the data is loaded in order no to do it again
                            loaded = true;
                        }
                    });
                }

            }
        });