My grid has "selectable: "row multiple"" set, and I want to make copies of all selected rows when a "Copy" custom button is pressed.
Please take a look at my code so far:
$(
'a.k-grid-copy'
).click(
function
(e) {
e.preventDefault();
var
grid = $(
"#grid"
).data(
"kendoGrid"
);
grid.select().each(
function
() {
console.log(
this
);
var
selected = grid.dataItem(
this
);
console.log(selected);
grid.dataSource.add({
a: selected.a,
b: selected.b,
c: selected.c
});
});
});
When I console.log(this) in the body of the .each() function, the rows are logged correctly. However, grid.dataItem(this) will return the first selected row in the first loop iteration, then for all subsequent iterations, it will return the first row of the grid (whether or not it is selected). Why is this happening? As I stated above, this for each iteration is CORRECT, but when you set var selected to grid.dataItem(this), selected becomes the first selected row on the first iteration in .each(), then it becomes the first row in the grid on all subsequent iterations.
Here is a Dojo that recreates the problem: http://dojo.telerik.com/ApAJU
The issue only appears when selecting multiple rows. Try selecting any number of rows > 1, press the Copy button, and see the console. The <tr> elements are correct, but the JS objects are not. This does not happen when you do not add the rows after (a.k.a if you ONLY log and do not create copies, there is no problem). Thus, there is something wrong with adding the copies.
Thanks
Andy