Advertisement
Guest User

Untitled

a guest
Mar 30th, 2015
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var gridData = $("#grid").data("kendoGrid");
  2. var intStartRN = 0;                 // start rownumber
  3. var intEndRN = 0;                    // end rownumber
  4. var nextStartRN = 0;                // if ctrl-clicked, this will be the next startpoint for shift-click
  5. var arrSelectedRows = [];             // Rows to be selected
  6. var arrCCSelectedRows = [];            // ctrl click selected rows (global)
  7. var arrCCUnSelectedRows = [];        // ctrl click unselected rows (global)
  8.  
  9. gridData.bind('dataBound', function()
  10. {
  11.     // First check what items to select from previous selections
  12.     gridData.clearSelection(); // always clear selection
  13.  
  14.     if(elements = $("#gridOutboundOrders").find("table.k-selectable tr.k-master-row"))
  15.     {
  16.         if(intStartRN>0)    // User has previously clicked
  17.         {
  18.             arrSelectedRows = []; // empty previous selection
  19.             $.each(elements, function(index, objTr) // walk through all selectable rows
  20.             {
  21.                 currentUid    = $(objTr).attr("data-uid"); // determine uid of current row
  22.                 currentRn    = gridData.dataSource.getByUid(currentUid).rn; // determine current row number from datasource
  23.  
  24.                 if($.inArray(currentRn, arrCCSelectedRows)>=0 || ($.inArray(currentRn, arrCCUnSelectedRows) < 0 && currentRn >= intStartRN && currentRn <= intEndRN)) // check if row should be selected
  25.                 {
  26.                     arrSelectedRows.push(objTr); // add item to arrSelectedRows (array of rows to be selected)
  27.                 }
  28.             });
  29.  
  30.             gridData.select(arrSelectedRows); // do actual select via grid select function
  31.         }
  32.     }
  33.  
  34.     // Bind onclick to all trs
  35.     if(elements = $("#gridOutboundOrders").find("table.k-selectable tr.k-master-row"))
  36.     {
  37.         $.each(elements, function(index, objTr) // bind click events to all selectable rows
  38.         {
  39.             $(objTr).off('click'); // clear all clicks first
  40.             $(objTr).on('click', function(e) // bind new onclick
  41.             {
  42.                 gridData.clearSelection(); // always clear selection, as Kendo delivers random selections on shift-click, and doesn't clear selections properly, either
  43.                 arrSelectedRows        = []; // in case of a click event, clear arrSelectedRows
  44.                 var selectedUid     = $(e.currentTarget).attr("data-uid"); // uid of clicked row
  45.                 var selectedRn        = gridData.dataSource.getByUid(selectedUid).rn; // get rn from datasource by uid
  46.  
  47.                 // check what to select, based by rownumber
  48.                 if(e.shiftKey) // shift-click
  49.                 {
  50.                     // empty all selections
  51.                     arrCCSelectedRows     = [];
  52.                     arrCCUnSelectedRows    = [];
  53.  
  54.                     if(nextStartRN>0) // previous click was ctrl-click;
  55.                     {
  56.                         intStartRN = nextStartRN; //use previous click location as start-location
  57.                         nextStartRN = 0;
  58.                     }
  59.  
  60.                     // set endrn to current row number
  61.                     intEndRN            = gridData.dataSource.getByUid(selectedUid).rn;
  62.  
  63.                     if(intStartRN <= intEndRN) // make sure we start the loop from small to large number
  64.                     {
  65.                         loopCCStart = intStartRN;
  66.                         loopCCEnd = intEndRN;
  67.                     }
  68.                     else
  69.                     {
  70.                         loopCCStart = intEndRN;
  71.                         loopCCEnd = intStartRN;
  72.                     }
  73.  
  74.                     for(i=loopCCStart, j=loopCCEnd; i<=j; i++) // loop from start to end for next possible control-click
  75.                     {
  76.                         arrCCSelectedRows.push(i); // add rownumber to selected rows for next possible control-click
  77.                     }
  78.                 }
  79.                 else if(e.ctrlKey) // control-click
  80.                 {
  81.                     // in case of a previous active shift-click selection, check what items are selected
  82.                     nextStartRN = selectedRn; // set nextStartRN on current rn (to be used by next possible shift-click)
  83.                     if($.inArray(selectedRn, arrCCSelectedRows) < 0) // ctrl-clicked row not in arrCCSelectedRows yet (not selected yet)
  84.                     {
  85.                         arrCCSelectedRows.push(selectedRn); // thus add it to arrCCSelectedRows
  86.                         if($.inArray(selectedRn, arrCCUnSelectedRows)>=0) arrCCUnSelectedRows.splice($.inArray(selectedRn, arrCCUnSelectedRows),1); // and remove it from arrCCUnSelectedRows
  87.                     }
  88.                     else // ctrl-clicked row already in arrCCSelectedRows (thus already selected)
  89.                     {
  90.                         arrCCUnSelectedRows.push(selectedRn); // hence deselect row (add it to unselected rows)
  91.                         if($.inArray(selectedRn, arrCCSelectedRows)>=0) arrCCSelectedRows.splice($.inArray(selectedRn, arrCCSelectedRows),1); // and remove it from arrCCSelectedRows
  92.                     }
  93.                 }
  94.                 else // normal click (or other click+key combi)
  95.                 {
  96.                     arrCCSelectedRows     = []; // remove all ctrl-click selected rows
  97.                     arrCCUnSelectedRows    = []; // remove all ctrl-click unselected rows
  98.                     intStartRN    = selectedRn; // set start rownumber to currently clicked row
  99.                     intEndRN    = selectedRn; // set end rownumber to currently clicked row
  100.                 }
  101.  
  102.                 // walk through currently shown rows and create selection
  103.                 // make sure we start from small row number to large rownumber
  104.                 var myStartRN     = intStartRN;
  105.                 var myEndRN        = intEndRN;
  106.                 if(intStartRN > intEndRN)
  107.                 {
  108.                     myStartRN = intEndRN;
  109.                     myEndRN = intStartRN;
  110.                 }
  111.                 var currentRows = $("#gridOutboundOrders").find("table.k-selectable tr.k-master-row"); // all currently shown selectable rows
  112.                 $.each(currentRows, function(index, currentRow) // walk over all these rows
  113.                 {
  114.                     var currentUid    = $(currentRow).attr("data-uid");                // uid of current row
  115.                     var currentRn    = gridData.dataSource.getByUid(currentUid).rn;    // rn of current row
  116.  
  117.                     if($.inArray(currentRn, arrCCSelectedRows) >= 0 || (currentRn >= myStartRN && currentRn <= myEndRN && $.inArray(currentRn, arrCCUnSelectedRows) < 0)) // check if row should be selected
  118.                     {
  119.                         arrSelectedRows.push(currentRow);                            // add row to arrSelectedRows array
  120.                     }
  121.                 });
  122.  
  123.                 gridData.select(arrSelectedRows); // select rows via grid select function
  124.             });
  125.         });
  126.     }
  127. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement