我有一個簡單的子網格作爲網格實現和父網格有超過1頁。jqGrid - 子網格重新加載,如果父網格頁面更改?
以下是測試代碼:
<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="css/style.css"/>
<link rel="stylesheet" type="text/css" href="css/ui-lightness/jquery-ui-1.8.16.custom.css"/>
<link rel="stylesheet" type="text/css" media="screen" href="css/ui.jqgrid.css" />
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery-ui.js"></script>
<script type="text/javascript" src="js/grid.locale-en.js" ></script>
<script type="text/javascript" src="js/jquery.jqGrid.min.js" ></script>
</head>
<body>
<table id="grid1">
<div id="pager1"></div>
</table>
<script type="text/javascript">
jQuery("#grid1").jqGrid({
datatype: "local",
height: 250,
rowNum:5,
rowList:[5,10,15],
cellEdit:true,
cellsubmit: 'clientArray',
pager: '#pager1',
colNames:['Inv No', 'Client','Notes','Checked?' ],
colModel:[
{name:'id',index:'id', width:60, sortable:false},
{name:'name',index:'name', width:100, sortable:false},
{name:'note',index:'note', width:150, sortable:false, editable:true},
{name:'ind_checked',index:'ind_checked', width:100, sortable:false, align:'center', editable:true,
edittype:'checkbox', editoptions: { value:"Yes:No" }, formatter:'checkbox'}
],
caption: "Testing",
loadonce: true,
subGrid : true,
subGridOptions: { reloadOnExpand : false},
subGridRowExpanded: function(subgrid_id, parent_rowid) {
subgrid_table_id = subgrid_id+"_t";
subgrid_pager_id = 'p_'+subgrid_table_id;
jQuery("#"+subgrid_id).html("<table id='"+subgrid_table_id+"'></table><div id='" + subgrid_pager_id + "'></div>");
jQuery("#"+subgrid_table_id).jqGrid({
datatype: "local",
height: "100%",
cellEdit:true,
cellsubmit: 'clientArray',
pager: '#'+subgrid_pager_id,
colNames:['Inv No','Item No', 'Qty'],
colModel:[
{name:'id',index:'id', width:60, sortable:false},
{name:'icode',index:'icode', width:60, sortable:false},
{name:'qty',index:'qty', width:100, sortable:false, editable:true}
],
loadonce: true,
loadComplete : function() {
var dataIds = $('#grid1').jqGrid('getDataIDs');
var data = $('#grid1').jqGrid('getRowData',dataIds[parent_rowid-1]);
loadDetail(data.id);
}
});
}
}).navGrid('#pager1');
var mydata = [
{id:"1",name:"test1",note:"note1",ind_checked:"yes"},
{id:"2",name:"test2",note:"note2",ind_checked:"no"},
{id:"3",name:"test3",note:"note3",ind_checked:"yes"},
{id:"4",name:"test4",note:"note4",ind_checked:"yes"},
{id:"5",name:"test5",note:"note5",ind_checked:"no"},
{id:"6",name:"test6",note:"note6",ind_checked:"no"},
{id:"7",name:"test7",note:"note7",ind_checked:"yes"},
{id:"8",name:"test8",note:"note8",ind_checked:"no"},
{id:"9",name:"test9",note:"note9",ind_checked:"no"} ]
;
for(var i=0;i<mydata.length;i++) {
jQuery("#grid1").jqGrid('addRowData',i+1,mydata[i]);
}
var mySGdata = [
{id:"1",icode:"item1",qty:10},
{id:"1",icode:"item2",qty:10},
{id:"3",icode:"item1",qty:10},
{id:"3",icode:"item2",qty:10},
{id:"3",icode:"item3",qty:10},
{id:"4",icode:"item2",qty:10},
{id:"7",icode:"item1",qty:10},
{id:"7",icode:"item3",qty:10},
{id:"9",icode:"item3",qty:10} ]
;
function loadDetail(id) {
for (var i=0; i<mySGdata.length; i++) {
if (mySGdata[i].id==id) {
//alert('Add subgridRow');
jQuery("#"+subgrid_table_id).jqGrid('addRowData',i+1,mySGdata[i]);
}
}
}
</script>
</body>
</html>
的問題是,如果家長電網改變了頁面的子網格將刷新本地數據,甚至是我加的subGridOptions的選項:{reloadOnExpand:假}和loadonce:TURE
比方說,你可以在子網格更改數量,然後摺疊和展開。子網格不會重新加載本地數據,並且仍然保留我的更改。
但是,如果我切換到下一頁並切換回上一頁,那麼當我展開它時,子網格會重新加載本地數據。所以,我失去了所有的改變。
有沒有人有任何想法和任何解決方法,或我失蹤的東西?請建議我。謝謝。
爲了測試我的腳本,請點擊rowList,並使網格首先包含5行,並有2頁,因爲我不知道如何使頁面/容器顯示5行在本地的第一個開始數據。 如果有人知道如何去做,那對我來說也是一種獎勵。謝謝!
更新時間: 我想通了,它不僅是網頁被更改,這也迫使亞格重裝時,我改變rowList(多少行顯示頁)。 有什麼辦法可以避免這種行爲?請。謝謝
謝謝你糾正我。對於主要問題,由於我的實際網格通過xml獲取數據,並且當用戶單擊「保存」時需要將所有更改保存在一個批處理中,因此更新對服務器的更改不能作爲此處的選項。所以現在,我正在努力將更改加載到子網格loadComplete之後的子網格中。 – early 2012-01-12 17:19:14
,或者強制子網格從locol而不是從服務器加載我的更改,如果子網格已經「加載」,因爲允許在運行時更改url和數據類型。 – early 2012-01-12 17:49:52
我終於解決了一個問題。這個概念是我設置了一個與parent_rowid對應的數組,當一個子網格展開時,然後將服務器中的數據存儲在子網格loadComplete事件中,並將所有更改保存到此數組中。如果展開相同的子網格,我指示子網格從本地數組而不是服務器加載數據。 @scessor,謝謝你指導我一個方向。 – early 2012-01-12 20:12:04