Inserire un ulteriore testo in una GridView sempre nell'ultima riga

Da Gambas-it.org - Wikipedia.

Il caso è quello in cui, ogni qual volta deve essere inserito del testo in una GridView, esso viene inserito nell'ultima riga spostando verso le righe superiori quello preesistente. [nota 1]

Mostriamo due possibili codici.

1° codice

Private i As Integer


Public Sub Form_Open()

 With GridView1
   .Columns.Count = 3
   .Rows.Count = 3
   .Rows.Height = 21
   .Columns[0].Width = GridView1.W * 0.45
   .Columns[1].Width = GridView1.W * 0.45
   .Columns[2].Width = GridView1.W * 0.05
   .Columns[2].Alignment = Align.Center
 End With

End


Public Sub Button1_Click()

 Inc i

 If i <= GridView1.Rows.Count Then 
   For c As Short = 0 To GridView1.Rows.Max - 1
     GridView1[c, 0].Text = GridView1[c + 1, 0].Text
     GridView1[c, 1].Text = GridView1[c + 1, 1].Text
     GridView1[c, 2].Text = GridView1[c + 1, 2].Text
   Next 
 Else 
' Se tutte e tre le righe iniziali della "GridView" sono state riempite con il testo, viene aggiunta una riga in ultimo:
   GridView1.Rows.Count += 1 
 Endif

 GridView1[GridView1.Rows.Max, 0].Text = "Testo 1"
 GridView1[GridView1.Rows.Max, 1].Text = "Testo 2"
 GridView1[GridView1.Rows.Max, 2].Text = CStr(i)

' Fa sì che sia sempre visibile l'ultima riga della "GridView":
 GridView1.ScrollY = i * GridView1.Rows.H

End


2° codice

[nota 2]

 Private $aTotale As New String[]
 Private $hText As TextBox
 Private $hGrid As GridView
 
 Static Public Sub _init()
 
  Application.Theme = "Gambas"
 
 End
 
 Public Sub Form_Open()
 
  Dim hControl As HBox
  Dim hButton As ToolButton
  Dim hLabel As Label
 
  With Me
    .H = 500
    .W = 500
    .Arrangement = Arrange.Vertical
    .Margin = True
    .Resizable = False
    .Spacing = True
  End With
 
  Me.Show
 
  With $hGrid = New GridView(Me)
    .Columns.Count = 2
    .Expand = True
    .Columns[0].Expand = True
    .Columns[1].Width = 150
    .Columns[1].Alignment = Align.Right
    .Grid = False
  End With
  With hControl = New HBox(Me)
    .H = 35
    .Spacing = True
  End With
  With hButton = New ToolButton(hControl) As "btnAdd"
    .W = 35
    .Picture = Picture["icon:/22/add"]
  End With
  With hLabel = New Label(hControl)
    .Alignment = Align.Right
    .Text = "TOTALE DOVUTO :"
    .Expand = True 
  End With
  With $hText = New TextBox(hControl)
    .Width = 150
  End With
  With $hGrid
    .Rows.Count = 1
    Print .H
    Print .Rows.H
    .Rows.Count = (.H \ .Rows.H)
  End With
 
 End
 
 Public Sub btnAdd_Click()
 
  Dim aConsumazioni As String[] = ["PANINO FARCITO", "ACQUA FRIZZANTE 1/2", "ACQUA NATURALE 1/2", "BIBITA GASATA", "BIRRA", "FETTA DI TORTA", "COPPA GELATO", "BICCHIERE VINO"]
  Dim aPrezzi As Float[] = [3.5, 1.0, 0.95, 2.5, 3.0, 2.5, 1.9, 1.8]
  Dim r, p As Integer
  ' un numero a caso
  p = Rand(0, 7)
  ' Se la griglia è piena aggiunge una riga e la riempe altrimenti riempe la prima riga e con swap la posiziona
  With $hGrid
    If $hGrid[0, 0].Text <> "" Then 
      .Rows.Count += 1
      $hGrid[.Rows.Max, 0].Text = aConsumazioni[p]
      $hGrid[.Rows.Max, 1].Text = Format(aPrezzi[p], "$,0.00")
      $aTotale.Push($hGrid[.Rows.Max, 1].Text)
    Else 
      $hGrid[0, 0].Text = aConsumazioni[p]
      $hGrid[0, 1].Text = Format(aPrezzi[p], "$,0.00")
      $aTotale.Push($hGrid[0, 1].Text)
      For r = 1 To .Rows.Max
        Swap $hGrid[r, 0].Text, $hGrid[r - 1, 0].Text 
        Swap $hGrid[r, 1].Text, $hGrid[r - 1, 1].Text 
      Next
    Endif
  End With
  $hText.Text = ReturnAddString($aTotale)
 
 End
 
 Private Function ReturnAddString(value As String[]) As String
 
  ' Ritorna la somma dei numeri 'stringa' come una stringa formattata currency
  Dim sCurr As String
  Dim iCurr As Long
 
  For i As Integer = 0 To value.Max
    sCurr = ReturnStringInteger(value[i])
    If IsNull(sCurr) Then Continue
    iCurr += CLong(sCurr)
  Next
  Return Format((iCurr / 100), "$,0.00")
 
 End
 
 Private Function ReturnStringInteger(value As String) As String
 
  ' Ritorna una stringa in forma di numero intero
  value = Trim(Replace(value, "€", ""))
  value = Trim(Replace(value, "$", ""))
  value = Trim(Replace(value, "£", ""))
  value = Replace(value, ".", "")
  value = Replace(value, " ", "")
  value = Replace(value, ",", "")
  Return value
 
 End


Note

[1] Vedere anche questa pagina: Aggiungere righe in una GridView da codice mediante un tasto

[2] Questo codice è stato suggerito da Gianluigi, membro del forum www.gambas-it.org