Hello
In my work, i need to implement cell drag and drop functionality between few RadGridView controls. I studied examples given on this forums and discovered that all examples use DataTable as data source object, but i use BindingList<object> data source and in this case same implementation does not work. My question, is it possible to implement drag and drop between gridView controls in bounded mode when i use BindingList<object> as data source ? If yes how can i do this.
In my sample code i use three gridView controls and one button. When button is pressed, rows are loaded to all gridViews, and when i want to drag and drop cells from one gridView to another. Bellow i copied sample code i was using, and attached screenshot of the UI.
Thanks in advance.
Iliya
In my work, i need to implement cell drag and drop functionality between few RadGridView controls. I studied examples given on this forums and discovered that all examples use DataTable as data source object, but i use BindingList<object> data source and in this case same implementation does not work. My question, is it possible to implement drag and drop between gridView controls in bounded mode when i use BindingList<object> as data source ? If yes how can i do this.
In my sample code i use three gridView controls and one button. When button is pressed, rows are loaded to all gridViews, and when i want to drag and drop cells from one gridView to another. Bellow i copied sample code i was using, and attached screenshot of the UI.
Thanks in advance.
Iliya
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Telerik.WinControls; using Telerik.WinControls.UI; namespace GridViewDragDropTutorial { public partial class RadForm2 : Telerik.WinControls.UI.RadForm { public RadForm2() { InitializeComponent(); Type3ValuesDataSource = new BindingList<Value>(); Type1ValuesDataSource = new BindingList<Value>(); Type2ValuesDataSource = new BindingList<Value>(); Type3ValuesGridView.AutoGenerateColumns = false; GridViewTextBoxColumn gridViewTextBoxColumn = new GridViewTextBoxColumn("Name", "Name"); gridViewTextBoxColumn.Width = 100; Type3ValuesGridView.MasterTemplate.Columns.Add(gridViewTextBoxColumn); GridViewCheckBoxColumn gridViewCheckBoxColumn = new GridViewCheckBoxColumn("CheckBoxes"); gridViewCheckBoxColumn.Width = 50; Type3ValuesGridView.MasterTemplate.Columns.Add(gridViewCheckBoxColumn); Type3ValuesGridView.ShowColumnHeaders = false; SubscribeForGridEvents(Type3ValuesGridView); Type3ValuesGridView.ReadOnly = true; Type3ValuesGridView.MultiSelect = true; Type3ValuesGridView.MasterTemplate.AllowRowReorder = true; Type3ValuesGridView.GridBehavior = new MyBaseGridBehavior(); Type3ValuesGridView.CellFormatting += GridViewCellFormatting; Type3ValuesGridView.RowFormatting += GridViewRowFormatting; Type3ValuesGridView.DataSource = Type3ValuesDataSource; Type1ValuesGridView.AutoGenerateColumns = false; GridViewTextBoxColumn columnLabelsGridViewColumn = new GridViewTextBoxColumn("Name", "Name"); columnLabelsGridViewColumn.Width = 210; Type1ValuesGridView.MasterTemplate.Columns.Add(columnLabelsGridViewColumn); Type1ValuesGridView.ShowColumnHeaders = false; SubscribeForGridEvents(Type1ValuesGridView); Type1ValuesGridView.ReadOnly = true; Type1ValuesGridView.MultiSelect = true; Type1ValuesGridView.MasterTemplate.AllowRowReorder = true; Type1ValuesGridView.GridBehavior = new MyBaseGridBehavior(); Type1ValuesGridView.CellFormatting += GridViewCellFormatting; Type1ValuesGridView.RowFormatting += GridViewRowFormatting; Type1ValuesGridView.DataSource = Type1ValuesDataSource; Type2ValuesGridView.AutoGenerateColumns = false; GridViewTextBoxColumn rowLabelsGridViewColumn = new GridViewTextBoxColumn("Name", "Name"); rowLabelsGridViewColumn.Width = 210; Type2ValuesGridView.MasterTemplate.Columns.Add(rowLabelsGridViewColumn); Type2ValuesGridView.ShowColumnHeaders = false; SubscribeForGridEvents(Type2ValuesGridView); Type2ValuesGridView.ReadOnly = true; Type2ValuesGridView.MultiSelect = true; Type2ValuesGridView.MasterTemplate.AllowRowReorder = true; Type2ValuesGridView.GridBehavior = new MyBaseGridBehavior(); Type2ValuesGridView.CellFormatting += GridViewCellFormatting; Type2ValuesGridView.RowFormatting += GridViewRowFormatting; Type2ValuesGridView.DataSource = Type2ValuesDataSource; } public BindingList<Value> Type3ValuesDataSource { get; set; } public BindingList<Value> Type1ValuesDataSource { get; set; } public BindingList<Value> Type2ValuesDataSource { get; set; } private void OnStartButtonClick(object sender, EventArgs eventArgs) { InitializeDataSource(Type3ValuesDataSource); InitializeDataSource(Type1ValuesDataSource); InitializeDataSource(Type2ValuesDataSource); } private void InitializeDataSource(BindingList<Value> dataSource) { for (int i = 0; i < 10; i++) { Value value = new Value(); value.Name = string.Format("Value{0}", Value.ValueIndexCounter); dataSource.Add(value); Value.ValueIndexCounter++; } } private void SubscribeForGridEvents(RadGridView gridView) { RadDragDropService dragDropService = gridView.GridViewElement.GetService<RadDragDropService>(); dragDropService.PreviewDragStart += DragDropServicePreviewDragStart; dragDropService.PreviewDragOver += DragDropPreviewOver; dragDropService.PreviewDragDrop += DragDropServicePreviewDragDrop; //dragDropService.PreviewDragHint += new EventHandler<PreviewDragHintEventArgs>(dragDropService_PreviewDragHint); } private void DragDropServicePreviewDragDrop(object sender, Telerik.WinControls.RadDropEventArgs e) { // you should mark the event as handled // this will prevent executing of default drag-n-drop logic for unbound mode // which is not working in bound mode e.Handled = true; // YOUR LOGIC HERE } private void DragDropServicePreviewDragStart(object sender, Telerik.WinControls.PreviewDragStartEventArgs e) { e.CanStart = true; } private void GridViewCellFormatting(object sender, CellFormattingEventArgs e) { e.CellElement.AllowDrag = true; e.CellElement.AllowDrop = true; } private void GridViewRowFormatting(object sender, RowFormattingEventArgs e) { // This enables row elements to be dragged and dropped e.RowElement.AllowDrag = true; e.RowElement.AllowDrop = true; } private void DragDropPreviewOver(object sender, RadDragOverEventArgs e) { } public class MyBaseGridBehavior : BaseGridBehavior { protected override bool OnMouseDownLeft(MouseEventArgs e) { bool result = base.OnMouseDownLeft(e); if (!this.GridViewElement.IsInEditMode && this.GridViewElement.CurrentCell == this.CellAtPoint && this.CellAtPoint != null) { RadGridViewDragDropService service = this.GridViewElement.GetService<RadGridViewDragDropService>(); service.Start(this.CellAtPoint); } return result; } } } public class Value { public static int ValueIndexCounter; public string Name { get; set; } } }