Differenze tra le versioni di "Inserire un ulteriore testo in una GridView sempre nell'ultima riga"
Da Gambas-it.org - Wikipedia.
(5 versioni intermedie di 2 utenti non mostrate) | |||
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. <SUP>[[[#Note|nota 1]]]</sup> |
− | Mostriamo | + | Mostriamo due possibili codici. |
+ | |||
+ | ====1° codice==== | ||
Private i As Integer | Private i As Integer | ||
Riga 24: | Riga 26: | ||
Inc i | Inc i | ||
− | If i < | + | If i <= GridView1.Rows.Count Then |
For c As Short = 0 To GridView1.Rows.Max - 1 | For c As Short = 0 To GridView1.Rows.Max - 1 | ||
GridView1[c, 0].Text = GridView1[c + 1, 0].Text | GridView1[c, 0].Text = GridView1[c + 1, 0].Text | ||
Riga 31: | Riga 33: | ||
Next | Next | ||
Else | Else | ||
− | <FONT Color=gray>' ''Se tutte e tre le righe iniziali della "GridView" sono state | + | <FONT Color=gray>' ''Se tutte e tre le righe iniziali della "GridView" sono state riempite con il testo, viene aggiunta una riga in ultimo:''</font> |
GridView1.Rows.Count += 1 | GridView1.Rows.Count += 1 | ||
Endif | Endif | ||
Riga 43: | Riga 45: | ||
End | End | ||
+ | |||
+ | |||
+ | ====2° codice==== | ||
+ | <SUP>[[[#Note|nota 2]]]</sup> | ||
+ | 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 | ||
+ | <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 $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 | ||
+ | |||
+ | <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] Vedere anche questa pagina: [[Aggiungere righe in una GridView da codice mediante un tasto]] | ||
+ | |||
+ | [2] 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 attuale delle 02:33, 4 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. [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