2013-12-17 22 views
0

我已經通過了我可以找到的每個示例,而且似乎都沒有適應我需要的特定場景。我找到了適合ctrl或shift-selection的例子,但只適用於JQGrid,不適用於TreeGrid。一旦我拿出這些例子,並嘗試將它們調整爲實現XML數據類型和URL的TreeGrid,而不是JSON或「本地」,它們就會中斷。TreeGrid XML shiftKey ctrlKey select

這最近一次嘗試包括結合此網址所採取的multiselecthandler:http://www.trirand.com/blog/?page_id=393/feature-request/more-control-over-clickselect-behavior/&value=beforeSelectRow&type=1&include=1&search=1

我需要創建的TreeGrid使用XML實現的選擇方法:單點擊選擇,按Ctrl鍵追加到選擇,並按住shift鍵選擇最後一個選定行和當前行之間的每一行。我從Oleg找到了一個基於JSON的JqGrid場景,但是一旦我改變它來使用TreeGrid和XML,它就不起作用。請幫忙。

這裏是由URL生成我的XML的一個子集:

<?xml version="1.0"?> 
<rows> 
<page>1</page> 
<total>1</total> 
<records>1</records> 
<row><cell>1</cell><cell>Bank Data</cell><cell></cell><cell>1</cell><cell/><cell>false</cell><cell>true</cell><cell>true</cell></row> 
<row><cell>3</cell><cell>FINANCIAL PROFILE</cell><cell></cell><cell>2</cell><cell>1</cell><cell>false</cell><cell>false</cell><cell>true</cell></row> 
<row><cell>4</cell><cell>Balance Sheet:</cell><cell></cell><cell>3</cell><cell>3</cell><cell>false</cell><cell>false</cell><cell>true</cell></row> 
<row><cell>5</cell><cell>Total assets</cell><cell>EXFHBS01</cell><cell>4</cell><cell>4</cell><cell>true</cell><cell>false</cell><cell>true</cell></row> 
<row><cell>11</cell><cell>Percent change in total assets</cell><cell>EXFHPC01</cell><cell>4</cell><cell>4</cell><cell>true</cell><cell>false</cell><cell>true</cell></row> 
<row><cell>18</cell><cell>Held-to-maturity securities (Amortized cost)</cell><cell>EXFHBS03</cell><cell>4</cell><cell>4</cell><cell>true</cell><cell>false</cell><cell>true</cell></row> 
<row><cell>25</cell><cell>Available-for-sale securities (Fair value)</cell><cell>EXFHBS04</cell><cell>4</cell><cell>4</cell><cell>true</cell><cell>false</cell><cell>true</cell></row> 
<row><cell>31</cell><cell>Total securities</cell><cell>EXFHBS02</cell><cell>4</cell><cell>4</cell><cell>true</cell><cell>false</cell><cell>true</cell></row> 
</rows> 

這裏是我的TreeGrid代碼:

 $(document).ready(function(){ 
     $("#grid").jqGrid({ 
      treeGrid: true, 
      treeGridModel: 'adjacency', 
      ExpandColumn: 'item', 
      url: 'parseCreateTreeGridXml.php', 
      datatype: 'xml', 
      mtype: 'GET', 
      colNames: ["ID", "Item", "Identifier"], 
      colModel: [ 
       {name: 'id', index: 'id', width: 2, hidden:false, key: true}, 
       {name: 'item', index: 'item', width: 40, hidden: false, sortable: true}, 
       {name: 'rcon', index: 'rcon', hidden:false, width: 5} 
      ], 
      treeIcons: {plus:'ui-icon-circle-plus',minus:'ui-icon-circle-minus',leaf:'ui-icon-stop'}, 
      rowNum: 10000, 
      width: 980, 
      height: '100%', 
      multiselect: true 
      beforeSelectRow: function(){ return false; } 
     }); 
    }); 
    var grid = $("#grid"); 
    grid.bind("click", grid, multiSelectHandler); 
    //grid.jqGrid('hideCol','cb'); 

    function multiSelectHandler(e) { 
     var mygrid = e.data; 
     var ts = mygrid[0], td = e.target; 
     var scb = $(td).hasClass("cbox"); 
     var ptr = $(td).parents("tr.jqgrow"); 
     if (!ptr.length || (td.tagName == 'INPUT' && !scb) || td.tagName == 'A') { 
      return true; 
     } 
     var sel = mygrid.getGridParam('selarrrow'); 
     var sid = ptr[0].id; 
     var selected = $.inArray(sid, sel) >= 0; 
     if (e.ctrlKey || (scb && (selected || !e.shiftKey))) { 
      mygrid.setSelection(false,true,ptr); 
     } else { 
      if (e.shiftKey) { 
       var six = mygrid.getInd(sid); 
       var min = six, max = six; 
       $.each(sel, function() { 
       var ix = mygrid.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) { 
         mygrid.setSelection(false, false, $(row)); 
        } 
       } 
      } else if (!selected) { 
       mygrid.resetSelection(); 
      } 
      if (!selected) { 
       mygrid.setSelection(false, true, ptr); 
      } else { 
       var osr = mygrid.getGridParam('onSelectRow'); 
       if ($.isFunction(osr)) { 
        osr(sid, true); 
       } 
      } 
     } 
    } 

回答

0

我解決我自己的問題,試錯,通過更換beforeSelectRow函數與:

 beforeSelectRow: function(rowid, e){ 
       var grid = $('#grid'); 
       if(e.ctrlKey){ 
        grid.jqGrid('setGridParam', {multikey: 'ctrlKey'}); 
       }else if(e.shiftKey){ 
        grid.jqGrid('setGridParam', {multikey: 'shiftKey'});      
        var rowIds = grid.jqGrid('getGridParam','selarrrow'); 
        //rowIds.sort(function(a, b) { return a - b }); //this is the magic line which sort the array 
        var iHi = Math.max.apply(Math,rowIds); // 3 
        var iLow = Math.min.apply(Math,rowIds); 
        var iStart = (rowid > iHi ? iHi : (rowid > iLow ? iLow : rowId)); 
        var iEnd = (rowid > iHi ? rowid : (rowid > iLow ? rowid : iLow)); 
        var allIds = grid.jqGrid('getDataIDs'); 
        //var msg = "rowid: "+rowid+"; rowIds: " + rowIds.join(", ")+"; iLow: "+iLow+"; iHi: "+iHi+"; iStart: "+iStart+"; iEnd: "+iEnd+"; allIds["+allIds.length+"]: "; 
        grid.jqGrid('resetSelection'); 
        for (var i=0; i < allIds.length; i++){ 
         var id = parseInt(allIds[i]); 
         var bSel = ((id >= iStart && id <= iEnd) && id != rowid); 
         if(bSel){ 
          msg += ", ["+i+"]:"+allIds[i]+"("+bSel+")"; 
          grid.jqGrid('setSelection',allIds[i], bSel); 
         } 
         if(id > iEnd) 
          break; 
        } 
        //alert(msg); 

       }else{ 
        grid.jqGrid('setGridParam', {multikey: ''}); 
       } 

       return true; 
      }