0

请参考下面的代码,我用它来从数据库加载数据。代码在第一次加载数据时运行良好。每条记录和每一页都能完美加载。

现在,如果我调用 Reload 函数,它会产生问题。

  1. 有时它会加载重复的行(例如,如果我的 jason 返回 20 行,网格将显示 40)
  2. 我松开了网格中记录的最后一页。

 jQuery("#list").jqGrid({
            url: "http://localhost/myapp/myfile.php",
            datatype: "json",                
            mtype:"POST",
            postData:{folder: 'INBOX' },
            jsonReader: 
            {
                root: "rows",
                page: "currpage",
                total: "totalpages",
                records: "totalrecords",
                id: "0",
                cell:"",
                repeatitems: false
            },
            colNames: ['Id','Message'],
            colModel: [ 
                        { name: 'messageid', index: 'messageid', hidden: true, search:false},
                        { name: 'message', index: 'message', search:false},
                      ],
            rowNum: 10,
            scroll: 1,
            prmNames:{npage:1},
            autowidth: true,
            height: 470,
            loadonce: true,
            viewrecords: true,
            altRows:true,                
            caption: "",
            pager: "#plist",
        });
        jQuery("#list").jqGrid('setFrozenColumns');

    function reload_list()
    {
        $("#list").setGridParam({datatype:'json'}).trigger('reloadGrid');
    }

请注意以下信息

我使用的框架是带有JqGrid版本jquery.jqGrid-4.3.1的 Codeigniter 。

我的代码中包含的文件是

  1. css/ui.jqgrid.css
  2. js/grid.locale-en.js
  3. js/jquery.jqGrid.src.js
  4. 插件/grid.posttext.js
  5. src/jqModal.js
  6. src/jqDnR.js

演示:http ://www.trimantra.com/demo/appointmentsystem/grid.php

请让我知道如何解决此问题。提前致谢。

4

2 回答 2

1

从您的代码中删除这一行:

jQuery("#list").jqGrid('setFrozenColumns');

正因为如此,它正在创建一个新行。

于 2012-09-24T09:49:15.250 回答
0

我无法重现行重复问题,但我可以在您的应用程序中看到很多其他问题。

我想您的主要问题是因为您在所有三个网格中加载了具有相同 ID 的数据。作为结果,您在页面上有 id 重复项。解决问题的最简单方法是使用idPrefixjqGrid 选项。

您可以在下面找到我发现的最重要问题的列表:

  • 您在应用程序中包含错误的 jQuery UI。您没有包含images主题的子目录。所以应用程序在加载http://www.trimantra.com/demo/appointmentsystem/lib/jquery.jqGrid-4.3.1/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png. 您应该将所有内容都包含images在您的项目中。
  • 您不在网格中使用idPrefix选项,而是在三个网格中加载相同的数据。结果,所有三个网格都将具有<tr>相同 id 的元素。HTML 不允许 id 重复。要解决此问题,您可以将idPrefix: "a",用于三个网格。结果,该行将进入第一个网格和最后一个网格,并且您将在页面上没有 id 重复项。idPrefix: "b"idPrefix: "c"messageid: "45"id="a45"id="b45"id="c45"
  • scroll: 1我认为和的组合没有意义loadonce: true。如果我了解您需要做什么,您应该 从所有网格中删除scroll: 1和删除。prmNames:{npage:1}虚拟滚动需要这些选项。
  • 您应该添加gridview: true选项,以在大量行的情况下多次提高网格的性能。
  • 产生服务器的服务器响应当前不对应 jqGrid 请求。该请求将包含rows=10, page=1, sidx=toname, sord=asc。服务器返回所有 48 行数据,数据未排序。无论如何,您应该在服务器代码中插入数据排序。
  • frozen:true在所有可见列中使用。我认为设置没有意义。
  • 如果您不需要显示'messageid'列,您可以从 中删除列定义colModel并使用jsonReader: {id: "messageid", repeatitems: false }. 结果将保存在页面上的位置(隐藏的列仍然在页面上放置)。
  • 您最好以独立于区域设置的格式ISO 8601传输日期。此外,您应该使用您可以使用formatter: 'data'的格式显示日期。主要好处是在使用的情况下正确的列排序顺序。05/16/2012 07:45 AMformatoptions: { newformat: "d/m/Y H:i A" }loadonce: true
  • colModel您应该从定义中删除尾随逗号。该组合},]是 JavaScript 中的错误。在最现代的网络浏览器中(但在 IE6 等旧版浏览器中不会),该错误将被忽略。最好编写无错误的代码。
于 2012-05-26T10:32:51.917 回答