1

我想知道如何确保在从服务器加载数据后 id 列隐藏在网格中,但是在选择一行中的任何可见单元格时应该可以使用 id 值。

来自服务器的数据看起来像;

{ "rows": [  
[ "0007A53CEC393D2CC1257BE3002AAC36","Name1","Telephone1","Mobile1","Workplace1" ] ,
[ "0007A53CEC393D2CC1257BE3002AAC36","Name2","Telephone2","Mobile2","workplace2" ] 
]}

网格代码看起来像;

// Load the grid
$( "#contentTable" ).jqGrid( {
url: jsonURL,
datatype: 'json',
autowidth: true, 
height: 520,
colNames: options.selectedColumnNames,
colModel: options.selectedColumnModel,
loadonce: true,
rownumbers: true,
rownumWidth: 40,
gridview: true,
pager: '#pager',
viewrecords: true,
sortorder: "asc",
jsonReader : {
cell: "",
id: "0"
},
caption: options.viewTitle
});

列模型看起来像;

columnNames = ['ID', 'Namn','Telefon', 'Mobil', 'Arbetsplats'];
columnModel = [
        {name:'id',index:'name', width: 200},
        {name:'name',index:'name', width: 200},
    {name:'telephone',index:'telephone', width:100},
    {name:'mobile',index:'mobile', width:100},
    {name:'workplace',index:'workplace', width:200}     
];

我的问题是,任何人都可以帮我弄清楚我应该如何隐藏 id 列而不显示在网格中,但我希望在连续选择一个 cel 时仍然能够获取 id 值?

4

2 回答 2

1

我不确定我是否正确理解“在连续选择任何可见单元格时应提供 id 值”下的意思。我想您的意思是,例如,onSelectRowcalback 的第一个参数(idrowid)应该具有来自输入数据(0007A53CEC393D2CC1257BE3002AAC36)的值。

首先,拥有唯一的id 值很重要。您发布的数据包含两行相同的id="0007A53CEC393D2CC1257BE3002AAC36". 我想这只是剪切和粘贴错误,您的真实数据包含真正唯一的 id 值。

id接下来重要的是要了解在大多数情况下根本不需要隐藏列。jqGrid总是id在网格的每一行(<tr>元素上)上分配属性。回调之类onSelectRow的从属性中获取值,id而不是从某个网格列中获取值。所以这行数据可以简化为

<tr id="0007A53CEC393D2CC1257BE3002AAC36">
    <td>Name1</td>
    <td>Telephone1</td>
    <td>Mobile1</td>
    <td>Workplace1</td>
</tr>

代替

<tr id="0007A53CEC393D2CC1257BE3002AAC36">
    <td style="display:none">0007A53CEC393D2CC1257BE3002AAC36</td>
    <td>Name1</td>
    <td>Telephone1</td>
    <td>Mobile1</td>
    <td>Workplace1</td>
</tr>

对应于隐藏id列。

下一句。我不建议您index在网格中指定列。尤其是在网格中使用不同 name的和index属性name:'id',index:'name'可能是错误的根源。index另一列名称上的哪些点的值name将起作用,但我不确定它只是剪切和粘贴错误。如果您使用loadonce: true,您可能会遇到 index其他name值的问题,例如colModel.

如果您仍然确实需要隐藏id列,可以使用以下内容colModel

colModel: [
    {name: 'id', key: true, hidden: true, width: 200},
    {name: 'name', width: 200},
    {name: 'telephone', width: 100},
    {name: 'mobile', width: 100},
    {name: 'workplace', width: 200}
],
jsonReader: {
    cell: "",
    id: "0"
}

就像在演示中一样。或者,您可以使用

colModel: [
    {name: 'name', width: 200, jsonmap: "1"},
    {name: 'telephone', width: 100, jsonmap: "2"},
    {name: 'mobile', width: 100, jsonmap: "3"},
    {name: 'workplace', width: 200, jsonmap: "4"}
],
jsonReader: {
    repeatitems: false,
    id: function () {
        return function (item) {
            return item[0];
        };
    }
}

并且没有隐藏id,只有id属性。查看另一个演示

于 2013-09-18T09:53:39.663 回答
0

尝试 :

$("#contentTable").jqGrid('hideCol','ID');
于 2013-09-18T11:21:13.577 回答