【问题标题】:Sorting data using jQgrid locally在本地使用 jQgrid 对数据进行排序
【发布时间】:2016-08-16 22:11:08
【问题描述】:

我使用 jQgrid 使用 xml 格式的 web 服务从服务器加载数据一次,然后使用 jqgrid 的排序功能。 起初数据被正确加载,但是当我使用排序时,每一行中的数据都被打乱了,这意味着每一行中的数据不正确。 排序完成,但对于每一列,另一行的数据放在每一行中。 这是我的代码:

 $.ajax({
        type: "POST",
        url: "WebService.svc/getInfoXML",
        dataType: "json",
        data: vdata,
        contentType: "application/json; charset=utf-8",
        success: function (json) {
            var data = json.d;
            jQuery("#tblDevs").jqGrid({
                datatype: 'xmlstring',


                datastr: data,

                colNames: [x1, x2, x3,x4],
                colModel: [
                                { name: 'devSerial', index: 'devSerial', hidden: true, width: 20, sortable: false },
                                { name: 'devName', index: 'devName', width: 100, sorttype: "string" },
                                { name: 'groupName', index: 'devSerial', hidden: true, width: 20, sortable: false },
                                { name: 'speed', index: 'speed', width: 70, sorttype: "number" },
                                { name: 'Date', index: 'Date', width: 115, sorttype: "string" },
                         ],
                viewrecords: true,
                direction: gridDirection,
                multiselect: false,
                rowNum: -1,
                rowTotal: 100000,
                width: 740,
                loadonce: true,
                sortable: true,
                gridComplete: function (rowId, rowData, rowElem) {


                    var grid = $("#tblDevs");
                    var rowData = grid.jqGrid('getDataIDs');
                    try {
                        for (var i = 0; i < rowData.length; i++) {
                            var emsStatus = jQuery("#tblDevs").getCell(rowData[i], "statusCode");
                            changeDevTableColor(emsStatus, rowData[i]);

                        }
                    }
                    catch (err) {

                    }
                },
                scrollrows: true,
                onSelectRow: function (id) {
                    var serial = jQuery("#tblDevs").getCell(id, "devSerial");
                    locate(serial);
                }


            });

function changeDevTableColor(emsStatus, rowId) {
    if (emsStatus == 6) {
        $("#tblDevs").jqGrid('setRowData', rowId, false, 'missionStyle6');
    }
    else if (emsStatus == 7) {
        $("#tblDevs").jqGrid('setRowData', rowId, false, 'missionStyle7');
    }
    else if (emsStatus == 8) {
        $("#tblDevs").jqGrid('setRowData', rowId, false, 'missionStyle8');
    }
    else if (emsStatus == 9) {
        $("#tblDevs").jqGrid('setRowData', rowId, false, 'missionStyle9');
    }
    else if (emsStatus == 10) {
        $("#tblDevs").jqGrid('setRowData', rowId, false, 'missionStyle10');
    }
    else if (emsStatus == 11) {
        $("#tblDevs").jqGrid('setRowData', rowId, false, 'missionStyle11');
    }
    else if (emsStatus == 12) {
        $("#tblDevs").jqGrid('setRowData', rowId, false, 'missionStyle12');
    }
    else if (emsStatus == 13) {
        $("#tblDevs").jqGrid('setRowData', rowId, false, 'missionStyle13');
    }
    else {
        $("#tblDevs").jqGrid('setRowData', rowId, false, 'missionStyle14');
    }
}

样本输出

<?xml version='1.0' encoding='utf-8'?>
<invoices>
    <rows>

        <row>
            <cell>63101</cell>
            <cell>3713</cell>
            <cell>-----</cell>
            <cell>1.26</cell>
            <cell>1394/12/12 21:44:57</cell>
            <cell>جنوب شرقی</cell>
            <cell>38</cell>
            <cell>309070</cell>
            <cell>140542</cell>
            <cell>حرکت از محل حادثه</cell>
        </row>
        <row>
            <cell>63100</cell>
            <cell>3723</cell>
            <cell>-----</cell>
            <cell>0.17</cell>
            <cell>1395/01/31 13:21:55</cell>
            <cell>جنوب شرقی</cell>
            <cell>22</cell>
            <cell>76343</cell>
            <cell>143153</cell>
            <cell>حالت نامشخص</cell>
        </row>
        <row>
            <cell>60814</cell>
            <cell>3724</cell>
            <cell>-----</cell>
            <cell>68.39</cell>
            <cell>1394/12/07 16:37:00</cell>
            <cell>شمال شرقی</cell>
            <cell>99</cell>
            <cell>221504</cell>
            <cell>139486</cell>
            <cell>رسیدن به بیمارستان</cell>
        </row>
        <row>
            <cell>63102</cell>
            <cell>3733</cell>
            <cell>-----</cell>
            <cell>7</cell>
            <cell>1395/02/04 15:15:47</cell>
            <cell>شمال</cell>
            <cell>98</cell>
            <cell>246200</cell>
            <cell>0</cell>
            <cell>حالت نامشخص</cell>
        </row>
        <row>
            <cell>60975</cell>
            <cell>60975</cell>
            <cell>-----</cell>
            <cell>0.2</cell>
            <cell>1394/03/19 12:59:03</cell>
            <cell>شرق</cell>
            <cell>99</cell>
            <cell>14440</cell>
            <cell>0</cell>
            <cell>حالت نامشخص</cell>
        </row>
        <row>
            <cell>63336</cell>
            <cell>63336</cell>
            <cell>-----</cell>
            <cell>0.02</cell>
            <cell>1394/03/19 10:39:59</cell>
            <cell>شمال غربی</cell>
            <cell>0</cell>
            <cell>0</cell>
            <cell>0</cell>
            <cell>حالت نامشخص</cell>
        </row>

    </rows>
</invoices> 

提前致谢

【问题讨论】:

  • 能否提供测试数据?为什么将index: 'devSerial' 用于两个devSerialgroupName?通常应该删除所有index 属性。你能把changeDevTableColor的代码包括进来吗?我想你想设置锥形单元格或网格的某些行的颜色或背景颜色取决于statusCode 列中的值。使用cellattrrowattr 是正确的方法。也强烈推荐使用free jqGridgetLocalRow方法。
  • 测试数据非常简单,只有几行字符串和数字,为了简单起见,我只是省略了它。关于隐藏字段我不知道,因为这段代码是从另一个我无法理解含义的编码器那里借来的,但是关于 changeDevTableColor 你是对的。 @Oleg
  • 这里的基本问题是我是否以正确的方法使用 jqgrid 选项,或者 jqgrid 没有关于本地排序的任何错误?
  • 对不起,如果你想要我帮助你,那么你也应该回答我的问题。我重复一遍:你能提供测试数据吗?能否附上changeDevTableColor 的代码? 了解数据以了解问题原因很重要。你在代码中所做的很奇怪。您调用 WCF 服务 url: "WebService.svc/getInfoXML"``using dataType: "json"`(!!!不是 dataType: "xml"),然后您将获得 d 属性 json.d 并将数据用作 datatype: 'xmlstring'。真的很怀疑!一种通常使用 JSON 或 XML,但不是两者的奇怪混合。
  • 我添加了函数,是的,你是对的 我检查了服务,它创建了 xml,但我不知道为什么使用 json 作为返回的数据类型,无论如何服务返回一个字符串问题中服务的示例输出。谢谢@Oleg

标签: jquery sorting jqgrid


【解决方案1】:

我无法重现您使用 jqGrid 4.4.1(请参阅the demo)或来自 GitHub 的最新免费 jqGrid(请参阅another demo)描述的问题。顺便说一句,我用rowattr callabck 替换了用于设置类的代码,该代码取决于statusCode 列(网格中不存在的列)中的值

rowattr: function (item) {
    var className;
    if (6 <= item.statusCode && item.statusCode <= 13) {
        className = "missionStyle" + item.statusCode;
    } else {
        className = "missionStyle14";
    }
    return { "class": className };
}

并为旧的 jqGrid 添加了gridview: true 选项以提高性能。无论如何,我无法重现数据排序的任何问题。

【讨论】:

  • 感谢您对 rowattr 和 gridview 选项的建议。似乎问题与另一组代码有关。无论如何,jqgrid 工作正常。这忽略了我关于解决问题的假设之一。谢谢@Oleg
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 2015-04-14
相关资源
最近更新 更多