2012-06-13 20 views
4

我有一個包含子網格的網格。兩個網格都有一個複選框列。當我點擊父複選框時,它會自動檢查/取消選中所有的子網格複選框。 所有複選框都使用DB值進行映射,因此每次狀態更改時都會更改數據庫中的值,並重新加載網格以更新複選框狀態。JqGrid reloadGrid保持膨脹展開子網格

的問題是,當我relaod網格,我失去了擴大亞格,這是很煩人的,因爲我每次點擊一個複選框,將其重新網格...

有沒有一種方法,以保持重新加載網格時哪一行被消耗的狀態?

這裏是我的代碼部分:

$('#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 } 
          }], 
           .... 

預先感謝您的幫助!

回答

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]); 
          } 
         },