Differenze tra le versioni di "Inserire un ulteriore testo in una GridView sempre nell'ultima riga"

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
 
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.
 
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.
  
Mostriamo un possibile codice:
+
Mostriamo due possibili codici.
 +
 
 +
====1° codice====
 
  Private i As Integer
 
  Private i As Integer
 
   
 
   
Riga 43: Riga 45:
 
   
 
   
 
  End
 
  End
 +
 +
====2° codice====
 +
<SUP>&#091;[[#Note|nota 1]]&#093;</sup>
 +
Private $aTotale As New String[]
 +
 +
Static Public Sub _init()
 +
 +
  Application.Theme = "Gambas"
 +
 +
End
 +
 +
Public Sub Form_Open()
 +
 +
  Me.Show
 +
  TextBox1.Width = 150
 +
  With GridView1
 +
    .Columns.Count = 2
 +
    .Rows.Count = 1
 +
    Print .H
 +
    Print .Rows.H
 +
    .Rows.Count = (.H \ .Rows.H)
 +
    .Columns[0].Expand = True
 +
    .Columns[1].Width = 150
 +
    .Columns[1].Alignment = Align.Right
 +
  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
 +
<FONT Color=gray>' ''un numero a caso''</font>
 +
  p = Rand(0, 7)
 +
<FONT Color=gray>' ''Se la griglia è piena aggiunge una riga e la riempe altrimenti riempe la prima riga e con swap la posiziona''</font>
 +
  With GridView1
 +
    If GridView1[0, 0].Text <> "" Then
 +
      .Rows.Count += 1
 +
      GridView1[.Rows.Max, 0].Text = aConsumazioni[p]
 +
      GridView1[.Rows.Max, 1].Text = Format(aPrezzi[p], "$,0.00")
 +
      $aTotale.Push(GridView1[.Rows.Max, 1].Text)
 +
    Else
 +
      GridView1[0, 0].Text = aConsumazioni[p]
 +
      GridView1[0, 1].Text = Format(aPrezzi[p], "$,0.00")
 +
      $aTotale.Push(GridView1[0, 1].Text)
 +
      For r = 1 To .Rows.Max
 +
        Swap GridView1[r, 0].Text, GridView1[r - 1, 0].Text
 +
        Swap GridView1[r, 1].Text, GridView1[r - 1, 1].Text
 +
      Next
 +
    Endif
 +
  End With
 +
  TextBox1.Text = ReturnAddString($aTotale)
 +
 +
End
 +
 +
Private Function ReturnAddString(value As String[]) As String
 +
 +
<FONT Color=gray>' ''Ritorna la somma dei numeri 'stringa' come una stringa formattata currency''</font>
 +
  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
 +
 +
<FONT Color=gray>' ''Ritorna una stringa in forma di numero intero''</font>
 +
  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] Questo codice è stato suggerito da [https://www.gambas-it.org/smf/index.php?action=profile;u=1249 Gianluigi], membro del forum www.gambas-it.org

Versione delle 09:54, 3 lug 2023

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.

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 < 4 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 popolate 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 1]

Private $aTotale As New String[]

Static Public Sub _init()

 Application.Theme = "Gambas"

End

Public Sub Form_Open()

 Me.Show
 TextBox1.Width = 150
 With GridView1
   .Columns.Count = 2
   .Rows.Count = 1
   Print .H
   Print .Rows.H
   .Rows.Count = (.H \ .Rows.H)
   .Columns[0].Expand = True
   .Columns[1].Width = 150
   .Columns[1].Alignment = Align.Right
 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 GridView1
   If GridView1[0, 0].Text <> "" Then 
     .Rows.Count += 1
     GridView1[.Rows.Max, 0].Text = aConsumazioni[p]
     GridView1[.Rows.Max, 1].Text = Format(aPrezzi[p], "$,0.00")
     $aTotale.Push(GridView1[.Rows.Max, 1].Text)
   Else 
     GridView1[0, 0].Text = aConsumazioni[p]
     GridView1[0, 1].Text = Format(aPrezzi[p], "$,0.00")
     $aTotale.Push(GridView1[0, 1].Text)
     For r = 1 To .Rows.Max
       Swap GridView1[r, 0].Text, GridView1[r - 1, 0].Text 
       Swap GridView1[r, 1].Text, GridView1[r - 1, 1].Text 
     Next
   Endif
 End With
 TextBox1.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] Questo codice è stato suggerito da Gianluigi, membro del forum www.gambas-it.org