Перетаскивание ссылки на объект VB.Net

Я пытаюсь «поменять местами» содержимое двух ячеек и их сопоставления. Для этого мне нужно перетащить ссылку на ячейку, а не на само строковое значение. Затем я могу использовать эту ссылку для обновления словаря, а также для получения значения. Это позволяет мне выполнить обмен, поскольку у меня будет ссылка на старую ячейку, чтобы добавить туда необходимое значение.

Проблема, с которой я сталкиваюсь, заключается в том, что я не уверен, как передать ссылку на ячейку:

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

и в событии падения:

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

Возможно ли то, что я пытаюсь сделать? Я полностью сломал его? Спасибо :)


person Damien    schedule 26.11.2008    source источник
comment
Когда я перетаскиваю текущую ячейку, она выбирается щелчком мыши, однако, когда я хочу переместить ее в другое место в другой строке, целевая ячейка не выбирается, и, следовательно, текущая ячейка не сохраняет свою ссылку, пока я хочу обновить его. Любые идеи?   -  person mustafabar    schedule 29.08.2009


Ответы (1)


Ваш e.Data – это IDataObject, не значение вы отправили с DoDragDrop.

Чтобы получить отправленное вами значение, вы должны вызвать e.Data.GetData(...).

Чтобы исправить код, замените проблемную строку на:

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

(или любой другой тип DataGridView1.CurrentCell).

Список типов, доступных для удаления, можно получить, вызвав e.Data.GetFormats(). .

person Daniel LeCheminant    schedule 03.03.2009