Premessa:
quanto scrivo qui sotto io lo uso su una
ColumnView, con le GridView le cose sono un po' diverse.
Intanto dobbiamo fare il setup della griglia prima di usarla in modo da definire le colonne usate, i titoli e le larghezze delle stesse.
Prendendo come base l'immagine che ho postato, questo è il codice che uso per impostare la griglia vuota:
PRIVATE SUB Pulisci_griglia()
Griglia.Enabled = TRUE
Griglia.Clear '-- la pulisce'
Griglia.Columns.Count = 6 '-- imposta 6 colonne'
'-- qui setto la larghezza di ognuna'
Griglia.Columns[0].Width = 60
Griglia.Columns[1].Width = 110
Griglia.Columns[2].Width = 90
Griglia.Columns[3].Width = 120
Griglia.Columns[4].Width = 120
Griglia.Columns[5].Width = 120
'-- qui setto il titolo di ognuna'
Griglia.Columns[0].Text = "Saldato"
Griglia.Columns[1].Text = "N° reg."
Griglia.Columns[2].Text = "Anno"
Griglia.Columns[3].Text = "Documento"
Griglia.Columns[4].Text = "Data reg."
Griglia.Columns[5].text = "Importo"
END
Adesso possiamo riempirla con i valori.
Io carico delle scadenze da saldare da un DB con questo codice:
PRIVATE FUNCTION Carica_scadenze(Cliente AS String) AS Boolean
DIM Aiuto AS Integer
DIM Connessione AS NEW Connection
DIM Risultato AS Result
DIM Comodo AS String
DIM cDataItaliana AS NEW clsDataIta
Connessione.Name = Application.Path & "/archivio"
Connessione.Type = "sqlite3"
Connessione.Open
'Risultato = Connessione.Find("pagamenti", "cliente = &1 AND saldato = &2", Cliente, FALSE)
Risultato = Connessione.Exec("SELECT * FROM pagamenti WHERE cliente=&1 AND SALDATO=&2 ORDER BY datamov", Cliente, FALSE)
IF Risultato.Available = FALSE THEN
RETURN FALSE
END IF
Risultato.MoveFirst
FOR Aiuto = 1 TO Risultato.Count
Comodo = Trim(CStr(Risultato["id"]))
Griglia.Add(Comodo, "") '-- aggiungo una nuova linea '
'(non mi preoccupo del puntatore perché Gambas punta sempre all'ultima)'
Griglia.Item[0] = ""
Griglia.Item[1] = Risultato["numero"]
Griglia.Item[2] = Risultato["anno"]
Griglia.Item[3] = Risultato["documento"]
Griglia.Item[4] = cDataItaliana.convIta(Risultato["datamov"])
Griglia.Item[5] = Risultato["importo"]
Risultato.MoveNext
NEXT
Connessione.Close
RETURN TRUE
END
Ora ho a video la situazione come nel mio screenshot.
Adesso metto il codice per gestire gli eventi Click...
PUBLIC SUB Griglia_Click()
(...)
'-- nel mio progetto qui non c'è niente di interessante, per cui
'-- ometto il codice. Voi potete mettere quello che vi pare
END
... e DoubleClick sulla griglia:
PUBLIC SUB Griglia_DblClick()
DIM Comodo AS String
'-- se si è aperto un pagamento, non permette di modificarne lo stato:
'-- per annullarlo, va cancellato
IF Operazione = "APRI" THEN
RETURN
END IF
Comodo = Griglia.Key
IF Griglia[Comodo].Picture <> "" THEN
Griglia[Comodo].Picture = ""
Saldi = Saldi - 1
ELSE
Griglia[Comodo].Picture = Picture.Load(pictOK)
Saldi = Saldi + 1
END IF
IF Saldi < 0 THEN
Saldi = 0
END IF
CalcolaTotale
Griglia.MoveTo(Griglia.Key)
END
Il codice all'interno del blocco IF-THEN-ELSE gestisce il caricamento del segno di spunto sulla 1a colonna della riga su cui si è cliccato in modo da far vedere all'utente quale scadenza verrà influenzata dall'operazione.