Drag and Dropping an Object Reference VB.Net

I am trying to 'swap' two cells' contents, and their mappings. To do this, I need to drag and drop a reference to the cell as opposed to the string value itself. I can then use this reference to update a Dictionary as well as get the value. It allows allows me to do the swap as I will have a reference to the old cell to add the value needed in there.

The problem I am having is I am not sure how to pass the cell reference:

Private Sub DataGridView1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown
    If e.Button = MouseButtons.Left Then
        DataGridView1.DoDragDrop(DataGridView1.CurrentCell, DragDropEffects.Copy)
    End If

End Sub

and in the drop event:

Private Sub DataGridView1_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DataGridView1.DragDrop

   'Problem is here -->'Dim copyedFromCell As DataGridViewCell = DirectCast(e.Data(), DataGridViewCell)** 
    Dim copyedFromKey As String = GetMappingForCell(copyedFromCell) 
    Dim thisKey As String = GetMappingForCell(DataGridView1.CurrentCell)
    Dim copyedFromValue As String = copyedFromCell.Value
    Dim thisValue As String = DataGridView1.CurrentCell.Value

    mappings(copyedFromKey) = DataGridView1.CurrentCell
    mappings(thisKey) = copyedFromCell

    DataGridView1.CurrentCell.Value = copyedFromValue
    copyedFromCell.Value = thisValue

End Sub

Is what I am trying to do possible? Have I completely broken it? Thanks :)

Answers


Your e.Data is a IDataObject, not the value you sent with DoDragDrop.

To get the value you sent, you must call e.Data.GetData(...).

To fix your code, replace the problem line with:

Dim copiedFromCell As DataGridViewCell = _
   e.Data.GetData(GetType(DataGridViewTextBoxCell))

(or whatever the type of DataGridView1.CurrentCell is.)

You can get a list of types available to be dropped by calling e.Data.GetFormats().


Need Your Help

IE Does not load my Google Font

html css internet-explorer fonts font-face

I just Copy and pasted my Google font import and code straight from the google code

Approach for Watir-Webdriver coverage on site with many clients

cucumber watir watir-webdriver web-testing

Ok, I need a boost on this thought process - my brain hurts. I'd like to get your feedback on some approaches.