2012-04-21 103 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