Scambiare il contenuto delle celle di una GridView mediante trascinamento con il mouse

Da Gambas-it.org - Wikipedia.

Scambio senza Drag&Drop

Mostriamo un possibile codice, con il quale si potrà scambiare il testo da una cella di una GridView mediante trascinamento con il mouse a un'altra mediante rilascio (similmente al comportamento del Drag&Drop, ma senza utilizzarne le risorse).

Public Sub Form_Open()

 With GridView1
   .Columns.Count = 3
   .Rows.Count = 5
 End With

 For b As Byte = 0 To GridView1.Columns.Max
   For c As Byte = 0 To GridView1.Rows.Max
     GridView1[c, b].Text = b & "-" & c
   Next
 Next

End


Public Sub GridView1_Click()

 GridView1.Tag = GridView1.Current

End


Public Sub GridView1_MouseUp()

 Swap GridView1.Tag.Text, GridView1.Current.Text

End


Scambio con il Drag&Drop

In quest'altro codice si farà uso delle risorse del Drag&Drop:

Public Sub Form_Open()

 With GridView1
   .Columns.Count = 3
   .Rows.Count = 5
   .Drop = True
 End With

 For b As Byte = 0 To GridView1.Columns.Max
   For c As Byte = 0 To GridView1.Rows.Max
     GridView1[c, b].Text = b & "-" & c
   Next
 Next

End


Public Sub GridView1_MouseDrag()

 GridView1.Drag(GridView1.Current.Text, "text/html")

End


Public Sub GridView1_Drop()

 Dim tmp As String

 With GridView1
' Individua l'indice della cella del rilascio:
   tmp = GridView1[.RowAt(Mouse.ScreenY - Me.Y - .Y), .ColumnAt(Mouse.ScreenX - Me.X - .X)].Text
   GridView1[.RowAt(Mouse.ScreenY - Me.Y - .Y), .ColumnAt(Mouse.ScreenX - Me.X - .X)].Text = Drag.Data
   .Current.Text = tmp
 End With

End