I'm able to drag rows within the kendo ui grid. Seperately able to drag rows outside the grid to another html element.
Is it possible to do both at same time?
For within grid:
Draggable within the grid:
grid.table.kendoSortable({
filter: ">tbody >tr",
cursor: "move",
hint: function(element) {
return $('<div class="k-grid k-widget"><table><tbody><tr>' + element.html() + '</tr></tbody></table></div>');
},
container: ".etr-watchlist_grid tbody",
change: function(e) {
let oldIndex = e.oldIndex,
newIndex = e.newIndex,
data = grid.dataSource.data(),
dataItem = grid.dataSource.getByUid(e.item.data("uid"));
grid.dataSource.remove(dataItem);
grid.dataSource.insert(newIndex, dataItem);
}
});
Drag outside the Grid:
$(".myGrid table tbody > tr").kendoDraggable({
group: "gridGroup",
threshold: 100,
hint: function(e) {
return $('<div class="k-grid k-widget"><table><tbody><tr>' + e.html() + '</tr></tbody></table></div>');
}
});
$(".dropHere").kendoDropTarget({
group: "gridGroup",
drop: function(e) {
e.draggable.hint.hide();
var txt = '';
$(e.draggable.element[0]).find("td").each(function(idx, td){
txt += $(td).text() + '\n';
});
e.dropTarget.text(txt);
}
});
});
I have taken an example of row reordering via drag from the telerik forums: http://www.telerik.com/forums/drag-and-drop-reordering
I have augmented the example to add dragging of rows outside the grid to multiple targets as well:
var grid = $("#grid").kendoGrid({
dataSource: dataSource,
selectable: true,
columns: ["id", "text", "position"]
}).data("kendoGrid");
grid.table.kendoDraggable({
filter: "tbody > tr",
group: "gridGroup",
threshold: 100,
hint: function(e) {
return $('<div class="k-grid k-widget"><table><tbody><tr>' + e.html() + '</tr></tbody></table></div>');
}
});
grid.table.kendoDropTarget({
group: "gridGroup",
drop: function(e) {
e.draggable.hint.hide();
var target = dataSource.getByUid($(e.draggable.currentTarget).data("uid")),
dest = $(document.elementFromPoint(e.clientX, e.clientY));
if (dest.is("th")) {
return;
}
dest = dataSource.getByUid(dest.parent().data("uid"));
//not on same item
if (target.get("id") !== dest.get("id")) {
//reorder the items
var tmp = target.get("position");
target.set("position", dest.get("position"));
dest.set("position", tmp);
dataSource.sort({ field: "position", dir: "asc" });
}
}
});
$(".dropTarg").kendoDropTarget({
group: "gridGroup",
drop: function(e) {
console.log(e.draggable)
e.draggable.hint.hide();
var txt = '';
$(e.draggable.currentTarget).find("td").each(function(idx, td){
txt += $(td).text() + '\n';
});
e.dropTarget.text(txt);
}
});