我有一个包含subGrid的Grid。两个网格都有一个Checkbox列。当我单击父复选框时,它会自动选中/取消选中所有子网格复选框。 所有复选框都使用DB值进行映射,因此每次状态更改时,它都会更改数据库中的值,然后重新加载网格以更新复选框状态。
问题在于,当我重新加载网格时,我松开了扩展的子网格,这非常烦人,因为每次点击复选框都会重新加载网格......
有没有办法在重新加载网格时保持哪一行的状态?
以下是我的代码的一部分:
$('#jqgSearchTaxPayer').jqGrid({
....
subGrid: true,
subGridRowExpanded: function (sendSubGrid, lineId) {
var sendSubGridId;
sendSubGridId = sendSubGrid + "_t";
$("#" + sendSubGrid).html("<table id='" + sendSubGridId + "' class='scroll'></table>");
$("#" + sendSubGridId).jqGrid({
....
{ name: 'Keep', index: 'Keep', width: '9px', align: 'center',
editable: true, edittype: 'checkbox',
formatter: function (cellvalue, options, rowObject) {
cellvalue = cellvalue + "";
cellvalue = cellvalue.toLowerCase();
var bchk = " checked=\"checked\"";
if (cellvalue == "false") {
bchk = "";
}
return "<input type='checkbox' onclick=\"SendLineChecked('" + options.rowId + "','" + sendSubGrid + "');\" " + bchk + " value='" + cellvalue + "' offval='no' />";
}, formatoptions: { disabled: false }
}],
....
提前感谢您的帮助!
答案 0 :(得分:2)
我找到了一个受此post启发的解决方案。
声明一个函数,它将获取当前展开的所有行并触发重新加载
var scrollPosition = 0;
var ids = [];
function RefreshGridData() {
var num;
ids = new Array();
$("#jqgSearchTaxPayer tr:has(.sgexpanded)").each(function () {
num = $(this).attr('id');
ids.push(num);
});
$("#jqgSearchTaxPayer").trigger("reloadGrid");
}
在主网格的GridComplete()函数中,解析行集合并展开它
gridComplete: function () {
for (var j = 0; j < ids.length; j = j + 1) {
$("#jqgSearchTaxPayer").jqGrid('expandSubGridRow', ids[j]);
}
},