Autore Topic: Calcolare con una ColumnView.  (Letto 2182 volte)

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Calcolare con una ColumnView.
« il: 08 Giugno 2008, 13:11:12 »
Buongiorno a tutti,
ho questa necessità che non riesco a risolvere:

una ColumnView con quattro colonne (Codice, Quantità, Prezzo, Totale) e una TextBox che deve visualizzare il totale della colonna Totale, naturalmente qualsiasi modifica o cancellazione delle righe della ColumnView nelle colonne Quantità, Prezzo e Totale deve modificare la somma nella TextBox. Spero di aver esposto il problema in modo chiaro.
Ciao
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Calcolare con una ColumnView.
« Risposta #1 il: 10 Giugno 2008, 15:18:06 »
Con la ColumnView hai il problema che l'indicizzazione la devi gestire tramite il cursore interno al controllo che punta la riga selezionata.

Un esempio potrebbe essere:
Codice: [Seleziona]

Somma = 0
ColumnView1.MoveFirst
DO
  Somma += Val(ColumnView1.Item[Colonna_del_valore])
  TRY ColumnView1.MoveNext
  IF ERROR THEN
    BREAK
  ENDIF
LOOP


Penso funzioni, l'ho scritto "al volo" senza provarlo.
In teoria dovrebbe ciclare attraverso tutte le righe e fare la somma dei valori dei campi della colonna interessata. Dovrebbe poi uscire in automatico non appena tenti di andare oltre l'ultima riga.

Un altro contenitore è la GridView: se devi fare molte operazioni di indicizzazione sulle celle, te lo consiglio.
Puoi indicizzare una cella semplicemente con:
Codice: [Seleziona]

GridView[Riga, Colonna].un_oggetto

Nel caso di cui sopra, il codice diventa:
Codice: [Seleziona]

Somma = 0
FOR i = 0 to GridView.Rows.Count - 1
  Somma += Val(GridView[i,Colonna_del_valore].Text)
NEXT
Visita il mio sito personale: http://www.leonardomiliani.com

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: Calcolare con una ColumnView.
« Risposta #2 il: 10 Giugno 2008, 21:58:52 »
Innanzitutto grazie per la risposta,

ho provato ad applicare il tuo esempio ma ottengo 'Null Object' sulla riga
 Somma += Val(ColumnView1.Item[Colonna_del_valore])

non mi hai specificato come dichiarare Somma, io la ho interpretata come variabile.
Per quanto riguarda il consiglio che mi hai dato, non conosco quasi nulla delle possibilità di applicazione della GridView, se non riuscirò a risolvere con la ColumnView, visto che mi dici che è più flessibile per questo tipo di utilizzo mi dovrò addattare anche se mi costerà parecchie modifiche in questo punto del mio programma.

Ciao
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Calcolare con una ColumnView.
« Risposta #3 il: 10 Giugno 2008, 23:46:31 »
E' vero, non funziona...
Ed è anche il motivo per cui non uso il ColumnView quando devo indicizzare una cella. Infatti, se utilizzi l'evento Click() del COlumnView, riesci ad ottenere informazioni usando la proprietà Item[] ma se indicizzi con Move.... ottieni NULL. E leggendo la documentazione, NULL viene restituito quando non c'è nessun cursore interno! Non ho mai capito questa cosa... c'è o non c'è?
Visita il mio sito personale: http://www.leonardomiliani.com

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: Calcolare con una ColumnView.
« Risposta #4 il: 11 Giugno 2008, 21:54:19 »
Quindi non ho alternative, devo eliminare la ColumnView e sostituirla con la GridView. Giusto?
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Calcolare con una ColumnView.
« Risposta #5 il: 12 Giugno 2008, 16:33:22 »
Guarda, per mia esperienza personale posso dirti che:

1) io uso i ColumnView quando voglio visualizzare dati non modificabili dopo la creazione della lista ma solo selezionabili dall'utente. In questo, la ColumnView permette anche l'ordinamento per colonne (molto comodo) ed un accesso semplice alla riga selezionata (con l'Item[] appunto);

2) uso le GridView quando invece devo interagire con i dati, ad esempio modificare singole celle, aggiungere o cancellare righe, inserire simboli grafici (ad esempio, in una GridView posso inserire un segno grafico di spunto per una selezione fatta dall'utente, ecc...).

Poi magari un modo per interagire con una ColumnView ci sarà senz'altro ma io sono uno di quelli che cerca le cose facili e tende ad usare gli strumenti offerti piuttosto che eseguire salti mortali tripli per fare cose di testa mia.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: Calcolare con una ColumnView.
« Risposta #6 il: 13 Giugno 2008, 14:10:30 »
Cerco di applicare i consigli che mi hai dato, quindi sto sostituendo la ColumnView con la GridView, come ti ho detto non conosco la Grid e la documentazione che ho trovato non mi aiuta tanto, per esempio se volessi ottenere questa funzione con la GridView hai idea di come si fà?

PRIVATE key AS Integer
PUBLIC SUB BtnInsertRiga_Click()
    INC key
    ColumnView1.Add(key, TextBox1.Text)
    ColumnView1[key][1] = TextBox2.Text
    ColumnView1[key][2] = TextBox3.Text
END
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: Calcolare con una ColumnView.
« Risposta #7 il: 15 Giugno 2008, 14:35:37 »
Codice: [Seleziona]

Public Sub btnInserisciRiga_Click()
Dim Riga as Integer
  Griglia.Rows.Count += 1
  Riga = Griglia.Rows.Count-1
  Griglia[Riga,0].Text = TextBox1.Text
  Griglia[Riga,1].Text = TextBox2.Text
  Griglia[Riga,2].Text = TextBox3.Text
END

L'ho scritto a mano, ma dovrebbe funzionare.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: Calcolare con una ColumnView.
« Risposta #8 il: 15 Giugno 2008, 19:52:27 »
Sempre preciso nelle tue risposte, esempio perfettamente funzionante, grazie molte, ora dovrò cercare di capire le altre funzioni della GridView.

Ciao
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: Calcolare con una ColumnView.
« Risposta #9 il: 15 Giugno 2008, 22:54:16 »
Mi serve ancora dell'aiuto, ho quasi implementato tutte le funzioni che mi servono con la GridView, quello che non riesco a fare (pensavo fosse la cosa più semplice) e selezionare una riga e fare l'update della stessa. Quando clicco sulla Grid non viene evidenziata la riga selezionata (a differenza della ColumnView) e non riesco proprio a capire da cosa dipende, sicuramente una cosa 'stupida' ma mi sono impantanato.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: Calcolare con una ColumnView.
« Risposta #10 il: 15 Giugno 2008, 23:11:59 »
Nelle proprietà della gridview devi selezionare il Mode, che di default è None. Può essere anche Single, per selezionare una sola riga per volta o Multiple (più righe).

Se non vuoi impostare questa proprietà tramite IDE, puoi farlo nel codice:

GridView1.Mode = Select.Single (o .None o .Multiple)

Ciao

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: Calcolare con una ColumnView.
« Risposta #11 il: 15 Giugno 2008, 23:43:51 »
Grazie giulio della dritta, eppure le proprietà sono la prima cosa che avevo verificato...succede. :ok:

ciao
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: Calcolare con una ColumnView.
« Risposta #12 il: 16 Giugno 2008, 14:20:10 »
Buongiorno a tutti, mi scuso se vi stresso con le domande sulla GridView ma non riesco proprio ad uscirne, ora mi trovo nella condizione di doverla popolare con i dati del mio DB , con la ColumnView faccevo in questo modo:

    ColumnView.Clear
    ColumnView.Columns.Count = rResult.Fields.Count
    FOR c = 0 TO rResult.Fields.Count - 1
    f = rResult.Fields[c]

    ColumnView.Columns.Count = 3
    ColumnView.Columns[0].Text = "Colonna 1"
    ColumnView.Columns[1].Text = "Colonna 2"
    ColumnView.Columns[2].Text = "Colonna 3"
 
    NEXT
    FOR EACH rResult
    ColumnView.Add(rResult.Index, rResult[0])

    FOR c = 1 TO rResult.Fields.Count - 1
    ColumnView[rResult.Index][c] = rResult[c]
 
    NEXT
    NEXT
 
E con la GridView??
Grazie per la pazienza
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline giulio

  • Maestro Gambero
  • ****
  • Post: 280
    • Mostra profilo
Re: Calcolare con una ColumnView.
« Risposta #13 il: 16 Giugno 2008, 17:59:32 »
Per le intestazioni delle colonne è la stessa cosa:

'imposto le intestazioni solo orizzontali
GridView1.Header = GridView1.Horizontal

'creo una griglia 2x2
GridView1.Columns.Count = 2
GridView1.Rows.Count = 2

'scrivo le intestazioni alle colonne  
GridView1.Columns[0].Text = "First Column"
GridView1.Columns[1].Text = "Second Column"

'per popolarla si deve entare nell'ottica
'che ogni cella della griglia si gestisce con le
'sue coordinate: Griglia[Riga, Colonna].Proprietà
 
GridView1[0, 0].Text = "hello"
GridView1[0, 1].Text = "world!"

Una volta capito il meccanismo imposti i tuoi FOR EACH
a seconda dell'esigenza. Ciao.