Differenze tra le versioni di "Ordinare manualmente i valori all'interno di una colonna di una GridView"

Da Gambas-it.org - Wikipedia.
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 1: Riga 1:
Per ordinare manualmente mediante le risorse del ''Drag&Drop'' il testo contenuto nelle celle di una colonna di una ''GridView'', si potrà adottare il seguente codice:
+
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>'&#091;[[#Note|nota 1]]&#093;</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>&#091;[[#Note|nota 1]]&#093;</sup>
+
     ss.Add(Drag.Data, Fix(Drag.Y / (.ScrollH / .Rows.Count)))  <SUP>'&#091;[[#Note|nota 2]]&#093;</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

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)