2011-08-15 145 views
0

作爲我的previous question的擴展,我想默認自動選擇行。在this response中,他們使用loadComplete在服務器請求後選擇行。但是,我從服務器請求一次,然後使用本地數據。我需要在每次組織列時重新選擇行,搜索網格......基本上每次數據視圖都會發生變化。jqgrid默認根據列值選擇行

我選擇基於列(book_id)而不是顯式rowid的行,那麼回答here是合適的嗎?或者jqGrid有一個明確的方法(例如onUpdateGrid)來幫助實現這個目標?現在看來,我只需要在onPagingonSortCol下複製代碼。

的dataInit方法爲fav_books列:

initBookEdit: function(elem){ 
    //populate reference table 
    populateBookRefs($(elem).val()); 

    //display dialog which contains reference table 
    //pressing OK button on dialog saves all id's as a 
    //comma delimited list in the main table 
    $('#bookRefPopup').dialog({ 
    buttons: { 
    "OK": function(){ 
     var selectedRows = bookRefTable.jqGrid('getGridParam', 'selarrrow'); 
     var selectedIds = new Array(); 
     for(var i=0; i<selectedRows.length; i++){ 
      var changedRow = bookRefTable.getRowData(selectedRows[i]); 
      var book_id = changedRow['book_id']; 
      selectedIds.push(book_id); 
     } 
     var editedRow = $('#mainTable').jqGrid('getGridParam', 'selrow'); 
     $('#mainTable').jqGrid('setCell',editedRow, 'docs_ref', selectedIds, null, null, true); 
     $('#mainTable').trigger('reloadGrid'); 
     $(this).dialog("close"); 
    }, 
    Cancel: function() { 
     $(this).dialog("close"); 
    } 
}//close buttons 
    });//close dialog 
} 

和參考表的初始化:

function populateBookRefs(ids){ 
    values = ids.split(','); 
    grid.jqGrid({ 
    ... 
    loadComplete: function(){ //event executed after server request 
     for(var i=0; i<values.length; i++){ 
      grid.jqGrid('setSelection',values[i],true); 
     } 

    } 
    ... 
    }); 
} 

回答

2

它看起來像gridComplete會做我想做什麼:

gridComplete: function(){ 
    var grid_ids=grid.jqGrid('getDataIDs'); 
    for(var i=0; i<grid_ids.length; i++){ 
     var rowid = grid_ids[i]; 
     var aRow = grid.jqGrid('getRowData',rowid); 
     var book_id = aRow['book_id']; 
     if($.inArray(book_id,values)!=-1){ 
      grid.jqGrid('setSelection',rowid,true); 
     } 
    } 
} 
+3

像你這樣的所有行的枚舉(關於'getDataIDs')在很多行的情況下工作會很慢。看看[另一個](http://stackoverflow.com/questions/5664587/jqgrid-load-large-data-set-without-pagination/5690583#5690583)。這裏顯示了更有效的枚舉方法。你應該改變'ui-state-disabled'類的設置來調用你需要的'setSelection''。 – Oleg

+0

感謝您抽出時間來解決潛在的問題。非常感激! – Andrea

+0

不客氣! – Oleg