我有一个带有多选的jqGrid 例如,如果另一列为真,我希望能够预先检查一定数量的行 到目前为止我所做的是从服务器传递一个包含布尔值的元素(列)。 我在gridComplete事件中隐藏了这一列 我可以选择 - 并在加载网格时检查预定义的行吗?
更新:
这是我的代码:
jQuery("#OrdersGrid").jqGrid({
url: $.SalesOrders.url.OrdersFetchUrl,
postData: { OrderStatus: orderStatus },
datatype: 'json',
mtype: 'POST',
colNames: ['N.Ordine', 'Cliente', 'Ragione Sociale', 'Stato', 'Fido', 'Data', ''],
colModel: [
{ name: 'Number', index: 'Number', editable: false, resizable: true, sortable: false, width: 76, align: 'left' },
{ name: 'CustomerCode', index: 'CustomerCode', editable: false, resizable: true, sortable: false, width: 50, align: 'left' },
{ name: 'CustomerName', index: 'CustomerName', editable: false, resizable: true, sortable: false, width: 410, align: 'left' },
{ name: 'Status', index: 'Status', editable: false, resizable: true, sortable: false, width: 40, align: 'center' },
{ name: 'LoCStatus', index: 'LoCStatus', editable: false, resizable: true, sortable: false, width: 40, align: 'center' },
{ name: 'Date', index: 'Date', editable: false, resizable: true, sortable: false, width: 70, align: 'right' },
{ name: 'Checked', index: 'Checked', editable: false, resizable: false, visible: false }
],
pager: $('#OrdersPager'),
rowNum: 30,
width: 794,
height: 220,
viewrecords: true,
shrinkToFit: false,
scroll: true,
rownumbers: true,
hidegrid: false,
multiselect: true,
emptyrecords: "Nessun record presente",
loadComplete: function (data) {
if (data.rows.length > 0) {
for (var i = 0; i < data.rows.length; i++) {
if (data.rows[i].cell[6] == 'true') {
jQuery("#OrdersGrid").jqGrid('setSelection', data.rows[i].id, true);
}
}
}
jQuery("#OrdersGrid").jqGrid('hideCol', 'Checked');
}
});
我已经实施了Oleg的解决方案,它就像一个魅力。
答案 0 :(得分:2)
您没有发布您使用的网格定义,因此我的一些问题仍然存在。不过,我希望你能在你的问题上找到答案here。在答案中包含的the demo中使用参数loadonce:true
,这使得更复杂。将被选择的行不在加载数据的第一页上。此外,在演示中没有列(甚至隐藏)可用于确定应选择哪些行。取而代之的是,网格中的选择信息将作为JSON响应的userdata
部分的一部分从服务器发送。这种方式更为通用,我希望它也可以在您的网格中使用。
更新:我发现您的代码很好。我只看到了优化的小地方:
editable: false
,resizable: true
和align: 'left'
是colModel
中的默认属性(请参阅jqGrid documentation)。所以我建议你删除这些值。visible: false
中不存在colModel
属性。你的意思是hidden: true
。使用正确的属性后,jQuery("#OrdersGrid").jqGrid('hideCol', 'Checked');
。loadComplete
jQuery("#OrdersGrid")
,您可以在jqGrid初始化之前将值保存在变量var mygrid = jQuery("#OrdersGrid");
中,然后您的代码将为mygrid.jqGrid({...,loadComplete: function (data) {...mygrid.jqGrid('setSelection', ...
其他一些评论。声明data.rows[i].cell[6] = 'true'
表示您使用Checked
序列化Checked.ToString()
属性。您可以使用Checked?"1":"0"
代替并减少传输数据的大小。我使用了formatter:"checkbox"
的许多网格,它们将“1”和“真”都解释为已选中。在您的情况下,您完全免费使用数据格式,因此您可以使用“1”和“0”甚至“1”和“”。
如果仅使用“已选中”列传输有关行选择的信息,则可以从网格中删除Checked
列。在data
loadComplete
参数中,您仍会看到Checked
属性(data.rows[i].cell[6]
),但会减少列数。