2011-08-15 128 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