Differenze tra le versioni di "Ordinare manualmente i valori all'interno di una colonna di una GridView"
Da Gambas-it.org - Wikipedia.
(2 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
− | Per ordinare manualmente mediante | + | Per ordinare manualmente mediante trascinamento del mouse il testo contenuto nelle celle di una colonna di una ''GridView'', si potranno adottare almeno le seguenti due modalità. |
+ | |||
+ | ==Mediante Drag&Drop== | ||
Public Sub Form_Open() | Public Sub Form_Open() | ||
Riga 27: | Riga 29: | ||
With GridView1 | With GridView1 | ||
− | If .Column <> .ColumnAt(Mouse.ScreenX - Me.X - .X) Then Return | + | If .Column <> .ColumnAt(Mouse.ScreenX - Me.X - .X) Then Return <SUP>'[[[#Note|nota 1]]]</sup> |
Dim ss As New String[.Rows.Count] | Dim ss As New String[.Rows.Count] | ||
For r As Byte = 0 To GridView1.Rows.Max | For r As Byte = 0 To GridView1.Rows.Max | ||
Riga 34: | Riga 36: | ||
ss.Remove(ss.Find(.Current.Text)) | ss.Remove(ss.Find(.Current.Text)) | ||
− | ss.Add(Drag.Data, Fix(Drag.Y / (.ScrollH / .Rows.Count))) <SUP>[[[#Note|nota | + | ss.Add(Drag.Data, Fix(Drag.Y / (.ScrollH / .Rows.Count))) <SUP>'[[[#Note|nota 2]]]</sup> |
For b As Byte = 0 To .Rows.Max | For b As Byte = 0 To .Rows.Max | ||
Riga 40: | Riga 42: | ||
Next | Next | ||
End With | End With | ||
+ | |||
+ | End | ||
+ | |||
+ | ==Senza il Drag&Drop== | ||
+ | Public Sub Form_Open() | ||
+ | |||
+ | With GridView1 | ||
+ | .Columns.Count = 3 | ||
+ | .Rows.Count = 5 | ||
+ | |||
+ | For b As Byte = 0 To .Columns.Max | ||
+ | For c As Byte = 0 To .Rows.Max | ||
+ | GridView1[c, b].Text = b & "-" & c | ||
+ | Next | ||
+ | Next | ||
+ | End With | ||
+ | |||
+ | End | ||
+ | |||
+ | |||
+ | Public Sub GridView1_Click() | ||
+ | |||
+ | GridView1.Tag = [GridView1.Row, GridView1.Column] | ||
+ | |||
+ | End | ||
+ | |||
+ | |||
+ | Public Sub GridView1_MouseUp() | ||
+ | |||
+ | With GridView1 | ||
+ | If .Column <> .Tag[1] Then Return | ||
+ | Dim ss As New String[.Rows.Count] | ||
+ | For b As Byte = 0 To .Rows.Max | ||
+ | ss[b] = GridView1[b, .Column].Text | ||
+ | Next | ||
+ | |||
+ | ss.Remove(ss.Find(GridView1[.Tag[0], .Tag[1]].Text)) | ||
+ | ss.Add(GridView1[.Tag[0], .Tag[1]].Text, .Row) | ||
+ | For b As Byte = 0 To .Rows.Max | ||
+ | GridView1[b, .Column].Text = ss[b] | ||
+ | Next | ||
+ | |||
+ | End With | ||
End | End | ||
Riga 47: | Riga 92: | ||
=Note= | =Note= | ||
[1] Un'altra modalità per trovare il numero d'indice della Colonna è: | [1] Un'altra modalità per trovare il numero d'indice della Colonna è: | ||
− | Fix(Drag.X / (.ScrollW / .Columns.Count)) | + | Fix(Drag.X / (.ScrollW / GridView1.Columns.Count)) |
[2] Un'altra modalità per trovare il numero d'indice della Riga è: | [2] Un'altra modalità per trovare il numero d'indice della Riga è: | ||
− | .RowAt(Mouse.ScreenY - Me.Y - .Y) | + | GridView1.RowAt(Mouse.ScreenY - Me.Y - GridView1.Y) |
Versione attuale delle 17:23, 10 dic 2023
Per ordinare manualmente mediante trascinamento del mouse il testo contenuto nelle celle di una colonna di una GridView, si potranno adottare almeno le seguenti due modalità.
Mediante Drag&Drop
Public Sub Form_Open() With GridView1 .Columns.Count = 3 .Rows.Count = 5 .Drop = True For b As Byte = 0 To .Columns.Max For c As Byte = 0 To .Rows.Max GridView1[c, b].Text = b & "-" & c Next Next End With End Public Sub GridView1_MouseDrag() GridView1.Drag(GridView1.Current.Text, "text/html") End Public Sub GridView1_Drop() With GridView1 If .Column <> .ColumnAt(Mouse.ScreenX - Me.X - .X) Then Return '[nota 1] Dim ss As New String[.Rows.Count] For r As Byte = 0 To GridView1.Rows.Max ss[r] = GridView1[r, .ColumnAt(Mouse.ScreenX - Me.X - .X)].Text Next ss.Remove(ss.Find(.Current.Text)) ss.Add(Drag.Data, Fix(Drag.Y / (.ScrollH / .Rows.Count))) '[nota 2] For b As Byte = 0 To .Rows.Max GridView1[b, .ColumnAt(Mouse.ScreenX - Me.X - .X)].Text = ss[b] Next End With End
Senza il Drag&Drop
Public Sub Form_Open() With GridView1 .Columns.Count = 3 .Rows.Count = 5 For b As Byte = 0 To .Columns.Max For c As Byte = 0 To .Rows.Max GridView1[c, b].Text = b & "-" & c Next Next End With End Public Sub GridView1_Click() GridView1.Tag = [GridView1.Row, GridView1.Column] End Public Sub GridView1_MouseUp() With GridView1 If .Column <> .Tag[1] Then Return Dim ss As New String[.Rows.Count] For b As Byte = 0 To .Rows.Max ss[b] = GridView1[b, .Column].Text Next ss.Remove(ss.Find(GridView1[.Tag[0], .Tag[1]].Text)) ss.Add(GridView1[.Tag[0], .Tag[1]].Text, .Row) For b As Byte = 0 To .Rows.Max GridView1[b, .Column].Text = ss[b] Next End With End
Note
[1] Un'altra modalità per trovare il numero d'indice della Colonna è:
Fix(Drag.X / (.ScrollW / GridView1.Columns.Count))
[2] Un'altra modalità per trovare il numero d'indice della Riga è:
GridView1.RowAt(Mouse.ScreenY - Me.Y - GridView1.Y)