Autore Topic: Gridview e Tableview  (Letto 3160 volte)

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Gridview e Tableview
« il: 02 Febbraio 2008, 19:45:13 »
Non riesco a capire le differenze fra questi due controlli. Gridview mi sembra + completo. Che ne pensate? E' possibile inserire i dati nella grid non utilizzando il codice ma editando la grid durante l'esecuzione del programma?

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Gridview e Tableview
« Risposta #1 il: 02 Febbraio 2008, 20:43:50 »
Io personalmente uso il GridView quando devo dare la possibilità agli utenti del mio gestionale di interagire con i dati.
Con la GridView posso inserire nuove righe, cancellarne di vecchie, riempirle con dati, infilarci dentro anche immagini (uso questa possibilità per la gestione dei pagamenti perché così che alla scadenza selezionata con un doppio click io applico un segno di spunto).
Il ColumnView sotto questo aspetto è meno interattivo: io lo uso solo quando devo creare una lista di elementi tra cui sceglierne uno (ad esempio una lista di clienti).
Visita il mio sito personale: http://www.leonardomiliani.com

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Gridview e Tableview
« Risposta #2 il: 03 Febbraio 2008, 10:02:42 »
complimenti, io la grid view non risco a renderla cosi interattiva..mi piacerebbe vedere nel wiki qualcosa :cry: oppure posta qualche esempio di gridview modificabile, grazie

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Gridview e Tableview
« Risposta #3 il: 03 Febbraio 2008, 11:06:26 »
Infatti ho sbagliato!
Ho invertito i nomi!

E' con la ColumnView che posso fare quello che ti ho detto, come allegato.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Gridview e Tableview
« Risposta #4 il: 03 Febbraio 2008, 11:53:19 »
sarebbe utile x tutti vedere il codice che permette di modificare i dati della grid on-the-fly, io mi sono scervellato ma non riesco :cry:

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Gridview e Tableview
« Risposta #5 il: 03 Febbraio 2008, 15:15:36 »
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:
Codice: [Seleziona]

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:

Codice: [Seleziona]

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...

Codice: [Seleziona]

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:

Codice: [Seleziona]

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.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Gridview e Tableview
« Risposta #6 il: 03 Febbraio 2008, 18:18:37 »
grazie poi ti mandero' la mia elaborazione, devo utilizzare questo in una form con 50 valori da modificare..

Offline andy60

  • Senatore Gambero
  • ******
  • Post: 1.255
    • Mostra profilo
    • https://www.linkedin.com/in/andbertini
Re: Gridview e Tableview
« Risposta #7 il: 06 Febbraio 2008, 07:14:27 »
Riguardo l'evento doubleclick: con comodo si recupera il valore della riga corrente, ho visto che te con la routine togli/inserisci nella prima colonna la picture.

Come faccio invece a modificare in loco i dati? E' possibile? Con la proprietà editable=true è possibile cliccare su un data riga e una data colonna e d editare il testo contenuto nella cella? Grazie (come al solito..a buon rendere..)

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Gridview e Tableview
« Risposta #8 il: 06 Febbraio 2008, 10:54:39 »
Io personalmente non amo l'editing diretto all'interno delle celle.
Non l'ho mai utilizzato neanche sulle griglie in VB.
A me, poi, in Gambas la proprietà Editable rende modificabile solo la prima colonna. Il resto non posso toccarlo.
Così ho aggirato l'ostacolo aprendo una finestra e riportando i dati da inserire/modificare in campi di testo.
In questo modo poi ho un controllo diretto su ciò che l'utente mi inserisce.

Il gestionale che ho fatto, ad esempio, contiene una griglia con le voci del corpo fattura: io controllo lì che la descizione immessa sia lunga al max. quanto consentito, che il numero relativo alla quantità sia corretto ma, soprattutto, che il prezzo venga formattato correttamente. Purtroppo c'è il problema del separatore decimale che in italiano è la virgola mentre in Gambas ed in inglese è il punto. Così controllo il numero, lo formatto come si deve (prendendo anche 2 decimali e basta) e poi rispedisco tutto al chiamante che provvede a riempire la griglia con i valori.
Visita il mio sito personale: http://www.leonardomiliani.com