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