我有一个多选择的 Jqgrid 。 最初, 我从服务器上用 Json 调用器装入网格, 当我从一页到另一页时, 多选择的行会保持正确 。
所选行的代号存储在数组中,而此数组则在调用时更新。我使用此数组来检查返回页面时已经选中的行。排序工作顺利,到目前为止我没有遇到任何问题。
在对特定字段应用过滤器时,请求被发送到服务器, 服务器将返回新过滤的结果为 Json, 然后重新装入网格 。
第一个页面被正确转换为选中行, 但是在修改页面和返回行时, 不再选择行。 但是, 数组仍然包含 ID, 并包含新添加的 ID 。
多重选择特性在重新装入后怎么停止工作? 还是因为重新装入而停止工作?
这是代码:
<script type= text/javascript >
var selectedFieldsMap={};
var selectedFieldsObjs = [];
var selectedFieldIds = [];
$(function() {
//function called when applying a filter
$( #ApplyFilterBtn ).click(function() {
saveGridState();
$( #Grid ).setGridParam({ url: getUrl() });
$( #Grid ).trigger( reloadGrid );
});
});
function saveGridState() {
var selectedIds = $( #Grid ).getGridParam( selarrrow );
$( #Grid ).data(current_page, selectedIds);
_.each(selectedIds, function(id) {
selectedFieldIds.push(id);
});
var idsToBeAdded = _.difference(selectedIds, getExistingRowIdsForGrid( #list ));
selectedFieldsMap[current_page] = idsToBeAdded;
_.each(idsToBeAdded, function(id) {
selectedFieldsObjs.push($( #Grid ).getRowData(id));
});
}
function getExistingRowIdsForGrid(gridSelector) {
var existingFields = $(gridSelector).getRowData();
return _.map(existingFields, function(obj) { return obj.Id; });
function resetFilterValuesAndReloadGrid() {
//reset filters and set grid param
$( #Grid ).setGridParam({
sortname: Id ,
sortorder: asc ,
page: 1,
url: getUrl()
});
$( #Grid ).jqGrid( sortGrid , Id , true);
$("#Grid").trigger( reloadGrid );
}
$("#Grid").jqGrid({
url: getUrl(),
datatype: "json",
edit: false,
add: false,
del: false,
height: 330,
mtype: GET ,
colNames: [ Id , Type , Category ],
jsonReader: {
root: "DataRoot",
page: "CurrentPage",
total: "TotalPages",
records: "TotalRecords",
repeatitems: false,
cell: "",
id: "0"
},
colModel: [
{ name: Id , index: Id , width: 95, align: center , sorttype: "int" },
{ name: Type , index: ValueTypeName , width: 110, align: left ,sortable: true },
{ name: Category , index: Category , width: 72, align: left , sortable: true },
],
pager: #pager ,
rowNum: pageCount[0],
rowList: pageCount,
sortname: Id ,
sortorder: asc ,
viewrecords: true,
gridview: true,
multiselect: true,
loadComplete: function () {
if(selectedFieldIds) {
$.each(_.uniq(selectedFieldIds), function(index, value) {
$( #Grid ).setSelection(value, true);
});
}
} ,
onPaging : function () {
saveGridState();
},
loadBeforeSend: function() {
current_page = $(this).getGridParam( page ).toString();
} ,
onSortCol: function () {
saveGridState();
}
});
}
function getUrl() {
//return url with the parameters and filtering
}
</script>