)
We use cookies to give you the best experience on our website. If you continue to browse, then you agree to our privacy policy and cookie policy. (Last updated on: June 24, 2019).
Unfortunately, activation email could not send to your email. Please try again.
Syncfusion Feedback

How to drag and drop the selected rows from grid into MultiColumnTreeView control in WinForms GridGroupingControl?

Platform: WinForms |
Control: GridGroupingControl |
Published Date: June 8, 2017 |
Last Revised Date: December 23, 2019

Drag and drop

In order to drag and drop the selected rows from GridGroupingControl into MultiColumnTreeView, the TableControlMouseDown event of GridGroupingControl and DragEnter and DragDrop events of MultiColumnTreeView control can be used.

To copy the selected records

C#

//Event Subscription
this.gridGroupingControl1.TableControlMouseDown += gridGroupingControl1_TableControlMouseDown;
 
//Event Customization
void gridGroupingControl1_TableControlMouseDown(object sender,GridTableControlMouseEventArgs e)
{
    GridGroupingControl grid = sender as GridGroupingControl;
              
    if (grid != null)
    {
        GridTableControl tableControl = grid.TableControl;
        Point pt = new Point(e.Inner.X, e.Inner.Y);
        int row, col;
        if (tableControl.PointToRowCol(pt, out row, out col))
        {
            GridTableCellStyleInfo style = tableControl.Model[row, col];
            //checks if the cell in which the MouseDown event is a RecordRowHeaderCell.
            //If yes, then begins the DragDrop operation.
            if ((style.TableCellIdentity.TableCellType == GridTableCellType.RecordRowHeaderCell
                 || style.TableCellIdentity.TableCellType == GridTableCellType.AlternateRecordRowHeaderCell)
                 && style.TableCellIdentity.DisplayElement.ParentRecord != null 
                 && style.TableCellIdentity.DisplayElement.ParentRecord.IsSelected())
            {
                DragDropEffects ef = tableControl.DoDragDrop(new DataObject(grid.Table.SelectedRecords), DragDropEffects.Copy);
 
                //Adding the Selected records to the temp collection.
                Record[] recordArray = new Record[this.gridGroupingControl1.Table.SelectedRecords.Count];
                this.gridGroupingControl1.Table.SelectedRecords.CopyTo(recordArray, 0);                       
                clonedRecords = recordArray.ToList();
 
                if (ef == DragDropEffects.Move)
                {
                    //need to delete selection if you want to support this.
                }
            }
        }
    }
}

 

VB

'Event Subscription
AddHandler Me.gridGroupingControl1.TableControlMouseDown, AddressOf gridGroupingControl1_TableControlMouseDown
 
'Event Customization
Private Sub gridGroupingControl1_TableControlMouseDown(ByVal sender As Object, ByVal e As GridTableControlMouseEventArgs)
    Dim grid As GridGroupingControl = TryCast(sender, GridGroupingControl)
    If grid IsNot Nothing Then
        Dim tableControl As GridTableControl = grid.TableControl
        Dim pt As New Point(e.Inner.X, e.Inner.Y)
        Dim row, col As Integer
        If tableControl.PointToRowCol(pt, row, col) Then
            Dim style As GridTableCellStyleInfo = tableControl.Model(row, col)
            'checks if the cell in which the MouseDown event is a RecordRowHeaderCell.
            'If yes, then begins the DragDrop operation.
             If (style.TableCellIdentity.TableCellType = GridTableCellType.RecordRowHeaderCell OrElse style.TableCellIdentity.TableCellType = GridTableCellType.AlternateRecordRowHeaderCell) AndAlso style.TableCellIdentity.DisplayElement.ParentRecord IsNot Nothing AndAlso style.TableCellIdentity.DisplayElement.ParentRecord.IsSelected() Then
                Dim ef As DragDropEffects = tableControl.DoDragDrop(New DataObject(grid.Table.SelectedRecords), DragDropEffects.Copy)
                'Adding the Selected records to the temp collection.
                Dim recordArray(Me.gridGroupingControl1.Table.SelectedRecords.Count - 1) As Record
                Me.gridGroupingControl1.Table.SelectedRecords.CopyTo(recordArray, 0)
                clonedRecords = recordArray.ToList()
                 If ef = DragDropEffects.Move Then
                     'need to delete selection if you want to support this.
                 End If
          End If
        End If
    End If
End Sub

 

To perform the drag operation

C#

//Event Subscription
this.multiColumnTreeView1.DragDrop += multiColumnTreeView1_DragDrop;
 
  //Event customization
  void multiColumnTreeView1_DragDrop(object sender, DragEventArgs e)
  {
      SelectedRecordsCollection recs = e.Data.GetData(typeof(SelectedRecordsCollection)) as SelectedRecordsCollection;
      if (recs != null)
      {
          TreeColumnAdvCollection collection  = this.multiColumnTreeView1.Columns;
          Syncfusion.Windows.Forms.Tools.MultiColumnTreeView.TreeNodeAdv[] item = new Syncfusion.Windows.Forms.Tools.MultiColumnTreeView.TreeNodeAdv[collection.Count];
          TreeNodeAdvSubItem[] subItems =new TreeNodeAdvSubItem[collection.Count];
                        
          foreach (SelectedRecord record in recs)
          {
              Record rec = record.Record;
 
              for (int i = 0; i < collection.Count; i++)
              {
                  string name = collection[i].Text;
                  if (i == 0)
                  {
                      item[i] = new Syncfusion.Windows.Forms.Tools.MultiColumnTreeView.TreeNodeAdv();
                      item[i].Text = rec[name].ToString();
                      item[i].HelpText = rec[name].ToString();
                  }
                  else if (i > 0)
                  {
                      subItems[i] = new TreeNodeAdvSubItem();
                      subItems[i].Text = rec[name].ToString();
                      subItems[i].HelpText = rec[name].ToString();
                      item[0].SubItems.Add(subItems[i]);
                  }
              }
              this.multiColumnTreeView1.Nodes.Add(item[0]);
          }
      }
      
  }

 

VB

'Event Subscription
AddHandler Me.multiColumnTreeView1.DragDrop, AddressOf multiColumnTreeView1_DragDrop
 
'Event customization
Private Sub multiColumnTreeView1_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs)
    Dim recs As SelectedRecordsCollection = TryCast(e.Data.GetData(GetType(SelectedRecordsCollection)), 
    If recs IsNot Nothing Then
        Dim collection As TreeColumnAdvCollection = Me.multiColumnTreeView1.Columns
        Dim item(collection.Count - 1) As Syncfusion.Windows.Forms.Tools.MultiColumnTreeView.TreeNodeAdv
        Dim subItems(collection.Count - 1) As TreeNodeAdvSubItem
        For Each record As SelectedRecord In recs
            Dim rec As Record = record.Record
            For i As Integer = 0 To collection.Count - 1
                Dim name As String = collection(i).Text
                If i = 0 Then
                    item(i) = New Syncfusion.Windows.Forms.Tools.MultiColumnTreeView.TreeNodeAdv()
                    item(i).Text = rec(name).ToString()
                    item(i).HelpText = rec(name).ToString()
                ElseIf i > 0 Then
                    subItems(i) = New TreeNodeAdvSubItem()
                    subItems(i).Text = rec(name).ToString()
                    subItems(i).HelpText = rec(name).ToString()
                    item(0).SubItems.Add(subItems(i))
                End If
            Next i
            Me.multiColumnTreeView1.Nodes.Add(item(0))
        Next record
    End If
 
End Sub

 

To copy the selected records

 

C#

 

//Event Subscription
this.multiColumnTreeView1.DragEnter += multiColumnTreeView1_DragEnter;
 
//Event Customization
void multiColumnTreeView1_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(typeof(SelectedRecordsCollection)))
        e.Effect = DragDropEffects.Copy;
    else
        e.Effect = DragDropEffects.None;
}

 

VB

 

'Event Subscription
AddHandler Me.multiColumnTreeView1.DragEnter, AddressOf multiColumnTreeView1_DragEnter
 
'Event Customization
Private Sub multiColumnTreeView1_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs)
    If e.Data.GetDataPresent(GetType(SelectedRecordsCollection)) Then
        e.Effect = DragDropEffects.Copy
    Else
        e.Effect = DragDropEffects.None
    End If
End Sub

 

Screenshot

Drag and drop the selected rows from grid to MultiColumnTreeView

Samples:

C#: Drag_Drop_CS

VB: Drag_Drop_VB

2X faster development

The ultimate WinForms UI toolkit to boost your development speed.
ADD COMMENT
You must log in to leave a comment

Please sign in to access our KB

This page will automatically be redirected to the sign-in page in 10 seconds.

Up arrow icon

Warning Icon You are using an outdated version of Internet Explorer that may not display all features of this and other websites. Upgrade to Internet Explorer 8 or newer for a better experience.Close Icon

Live Chat Icon For mobile
Live Chat Icon