2012-04-21 143 views
0

我想在jqGrid中具備以下能力。 當用戶點擊網格中的複選框時,會選擇一行。 當用戶隨後點擊「控制鍵」並選擇複選框時,用戶可以隨後選擇更多的行數。然後當用戶點擊複選框並且如果當前行被選中,則選擇當前行。這可能與jqGrid? 但是,單擊單元格時不會發生任何情況。只有複選框可以提供事件。jqGrid多行選擇高級

回答

0

是的,應該是可以的。看看checkbox selection的正常範例 - 它讓你成爲那裏的一部分。儘管如此,它並沒有像你期望的那樣真正處理SHIFT選擇的東西。

我做了一些搜索,發現這個代碼在jqGrid的支持網站:

function multiSelectHandler(sid, e) { 
    var grid = $(e.target).closest("table.ui-jqgrid-btable"); 
    var ts = grid[0], td = e.target; 
    var scb = $(td).hasClass("cbox"); 
    if ((td.tagName == 'INPUT' && !scb) || td.tagName == 'A') { 
     return true; 
    } 
    var sel = grid.getGridParam('selarrrow'); 
    var selected = $.inArray(sid, sel) >= 0; 
    if (e.ctrlKey || (scb && (selected || !e.shiftKey))) { 
     grid.setSelection(sid,true); 
    } else { 
     if (e.shiftKey) { 
      var six = grid.getInd(sid); 
      var min = six, max = six; 
      $.each(sel, function() { 
        var ix = grid.getInd(this); 
        if (ix < min) min = ix; 
        if (ix > max) max = ix; 
       }); 
      while (min <= max) { 
       var row = ts.rows[min++]; 
       var rid = row.id; 
       if (rid != sid && $.inArray(rid, sel)<0) { 
        grid.setSelection(row.id, false); 
       } 
      } 
     } else if (!selected) { 
      grid.resetSelection(); 
     } 
     if (!selected) { 
      grid.setSelection(sid,true); 
     } else { 
      var osr = grid.getGridParam('onSelectRow'); 
      if ($.isFunction(osr)) { 
       osr(sid, true); 
      } 
     } 
    } 
} 

要使用它,你應該能夠在beforeSelectRow處理程序中設置此功能。防爆。是這樣的:

$("#gridid").jqGrid({ 
// Rest of code to configure grid 
beforeSelectRow: multiSelectHandler, 
// Other handlers/configuration 
}); 
+0

@Oleg一個問題,你可能已經遇到了... HTTP://stackoverflow.com/questions/10552867/jqgrid-advanced-search-dialog-column-which-has-dropdown-選擇 – chugh97 2012-05-11 14:02:03