Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var gridData = $("#grid").data("kendoGrid");
- var intStartRN = 0; // start rownumber
- var intEndRN = 0; // end rownumber
- var nextStartRN = 0; // if ctrl-clicked, this will be the next startpoint for shift-click
- var arrSelectedRows = []; // Rows to be selected
- var arrCCSelectedRows = []; // ctrl click selected rows (global)
- var arrCCUnSelectedRows = []; // ctrl click unselected rows (global)
- gridData.bind('dataBound', function()
- {
- // First check what items to select from previous selections
- gridData.clearSelection(); // always clear selection
- if(elements = $("#gridOutboundOrders").find("table.k-selectable tr.k-master-row"))
- {
- if(intStartRN>0) // User has previously clicked
- {
- arrSelectedRows = []; // empty previous selection
- $.each(elements, function(index, objTr) // walk through all selectable rows
- {
- currentUid = $(objTr).attr("data-uid"); // determine uid of current row
- currentRn = gridData.dataSource.getByUid(currentUid).rn; // determine current row number from datasource
- if($.inArray(currentRn, arrCCSelectedRows)>=0 || ($.inArray(currentRn, arrCCUnSelectedRows) < 0 && currentRn >= intStartRN && currentRn <= intEndRN)) // check if row should be selected
- {
- arrSelectedRows.push(objTr); // add item to arrSelectedRows (array of rows to be selected)
- }
- });
- gridData.select(arrSelectedRows); // do actual select via grid select function
- }
- }
- // Bind onclick to all trs
- if(elements = $("#gridOutboundOrders").find("table.k-selectable tr.k-master-row"))
- {
- $.each(elements, function(index, objTr) // bind click events to all selectable rows
- {
- $(objTr).off('click'); // clear all clicks first
- $(objTr).on('click', function(e) // bind new onclick
- {
- gridData.clearSelection(); // always clear selection, as Kendo delivers random selections on shift-click, and doesn't clear selections properly, either
- arrSelectedRows = []; // in case of a click event, clear arrSelectedRows
- var selectedUid = $(e.currentTarget).attr("data-uid"); // uid of clicked row
- var selectedRn = gridData.dataSource.getByUid(selectedUid).rn; // get rn from datasource by uid
- // check what to select, based by rownumber
- if(e.shiftKey) // shift-click
- {
- // empty all selections
- arrCCSelectedRows = [];
- arrCCUnSelectedRows = [];
- if(nextStartRN>0) // previous click was ctrl-click;
- {
- intStartRN = nextStartRN; //use previous click location as start-location
- nextStartRN = 0;
- }
- // set endrn to current row number
- intEndRN = gridData.dataSource.getByUid(selectedUid).rn;
- if(intStartRN <= intEndRN) // make sure we start the loop from small to large number
- {
- loopCCStart = intStartRN;
- loopCCEnd = intEndRN;
- }
- else
- {
- loopCCStart = intEndRN;
- loopCCEnd = intStartRN;
- }
- for(i=loopCCStart, j=loopCCEnd; i<=j; i++) // loop from start to end for next possible control-click
- {
- arrCCSelectedRows.push(i); // add rownumber to selected rows for next possible control-click
- }
- }
- else if(e.ctrlKey) // control-click
- {
- // in case of a previous active shift-click selection, check what items are selected
- nextStartRN = selectedRn; // set nextStartRN on current rn (to be used by next possible shift-click)
- if($.inArray(selectedRn, arrCCSelectedRows) < 0) // ctrl-clicked row not in arrCCSelectedRows yet (not selected yet)
- {
- arrCCSelectedRows.push(selectedRn); // thus add it to arrCCSelectedRows
- if($.inArray(selectedRn, arrCCUnSelectedRows)>=0) arrCCUnSelectedRows.splice($.inArray(selectedRn, arrCCUnSelectedRows),1); // and remove it from arrCCUnSelectedRows
- }
- else // ctrl-clicked row already in arrCCSelectedRows (thus already selected)
- {
- arrCCUnSelectedRows.push(selectedRn); // hence deselect row (add it to unselected rows)
- if($.inArray(selectedRn, arrCCSelectedRows)>=0) arrCCSelectedRows.splice($.inArray(selectedRn, arrCCSelectedRows),1); // and remove it from arrCCSelectedRows
- }
- }
- else // normal click (or other click+key combi)
- {
- arrCCSelectedRows = []; // remove all ctrl-click selected rows
- arrCCUnSelectedRows = []; // remove all ctrl-click unselected rows
- intStartRN = selectedRn; // set start rownumber to currently clicked row
- intEndRN = selectedRn; // set end rownumber to currently clicked row
- }
- // walk through currently shown rows and create selection
- // make sure we start from small row number to large rownumber
- var myStartRN = intStartRN;
- var myEndRN = intEndRN;
- if(intStartRN > intEndRN)
- {
- myStartRN = intEndRN;
- myEndRN = intStartRN;
- }
- var currentRows = $("#gridOutboundOrders").find("table.k-selectable tr.k-master-row"); // all currently shown selectable rows
- $.each(currentRows, function(index, currentRow) // walk over all these rows
- {
- var currentUid = $(currentRow).attr("data-uid"); // uid of current row
- var currentRn = gridData.dataSource.getByUid(currentUid).rn; // rn of current row
- if($.inArray(currentRn, arrCCSelectedRows) >= 0 || (currentRn >= myStartRN && currentRn <= myEndRN && $.inArray(currentRn, arrCCUnSelectedRows) < 0)) // check if row should be selected
- {
- arrSelectedRows.push(currentRow); // add row to arrSelectedRows array
- }
- });
- gridData.select(arrSelectedRows); // select rows via grid select function
- });
- });
- }
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement