Il linguaggio Visual Basic di Microsoft
 

VB6 Raggruppamento dati di una griglia

Jayelef 5 Dic 2014 11:22
Buongiorno a voi tutti,

non riesco ad impostare *****iticamente un algoritmo che dovrebbe consentirmi di
effettuare la scrematura / raggruppamento dei dati di una griglia.
Nello specifico, accade che tramite input utente, inserisco in una griglia i
seguenti dati nelle rispettive colonne:

Nome - Quota Associativa - Categoria

Gianni 500,00 A
Dario 150,00 A
Marcello 25,00 B
Luigi 100,00 A


In questo caso, senza utilizzare alcun db, ma direttamente dal form, vorrei
ottenere il risultato di raggruppare le singole categorie e vedere quali sono,
e visualizzare i totali per ogni categoria.
Purtroppo mi continuo ad invischiare in loop assurdi di if then else o select
varie senza venirne a capo.
Se scrivessi i dati su un db temporaneo, sarebbe facile ottenere i risultati con
una query per gruppo, ma vorrei evitare di utilizzare questa soluzione, vorrei
direttamente valutare attraverso un rapido ciclo di controllo dalla riga 0 a n
della griglia. Preciso che le categorie potrebbero essere diverse e che non è
detto che seguano l'ordine A,B,C...etc ma l'inserimento utente potrebbe essere
casuale.

Grazie a chi potrà darmi un aiuto.
Franz_aRTiglio 5 Dic 2014 12:43
Jayelef ha detto questo venerdì :
> Buongiorno a voi tutti,
>
> non riesco ad impostare *****iticamente un algoritmo che dovrebbe consentirmi
> di effettuare la scrematura / raggruppamento dei dati di una griglia. Nello
> specifico, accade che tramite input utente, inserisco in una griglia i
> seguenti dati nelle rispettive colonne:
>
> Nome - Quota Associativa - Categoria
>
> Gianni 500,00 A
> Dario 150,00 A
> Marcello 25,00 B
> Luigi 100,00 A

La domanda è poco chiara... vuoi ordinarli per ? alfabetico ? quota ?
categoria ? andando a naso vorresti ordinarli per categoria; quante
categorie ci sono ?

Comunque, una via percorribile è quella di scorrere l'intera griglia
usando un comparatore di categoria e riempire una variabile ad indice
con i risultati tramite un puntatore, quindi ri-popolare la griglia con
i risultati ordinati.

Considerando di ordinare la sola categoria da una flexgrid, codice
scritto A BRACCIO:

Sub OrdinaGriglia()
Dim ValoriOrdinati(GrigliadaOrdinare.rows) as String
Dim Puntatore as Integer, Categoria as byte, NumeroVoci as integer
NumeroVoci = GrigliadaOrdinare.rows ' totale voci da sistemare
For Categoria = 65 to 90 ' categorie da A a Z
For Puntatore = 0 to GrigliadaOrdinare.rows
If Asc(GrigliadaOrdinare.TextMatrix(Puntatore,2)) = Categoria Then
ValoriOrdinati(NumeroVoci) = GrigliadaOrdinare.TextMatrix(Puntatore,0) _
& VbTab & GrigliadaOrdinare.TextMatrix(Puntatore,1) _
& VbTab & GrigliadaOrdinare.TextMatrix(Puntatore,2)
NumeroVoci = NumeroVoci -1
End if
Next Puntatore
If NumeroVoci = 0 Then Exit For
Next Categoria
NumeroVoci = GrigliadaOrdinare.rows ' ricarico il contatore
GrigliadaOrdinare.clear
For Puntatore = NumeroVoci to 0 step -1
GrigliadaOrdinare.Additem ValoriOrdinati(Puntatore)
Next Puntatore
End Sub
Sauro 5 Dic 2014 16:07
[cut]

Dim Cat(1 To 1000) As String
Dim TotaleCat(1 To 1000) As Currency
Dim QuanteCat As Long
Dim CatPassata As String 'Usare l'elemento della griglia
Dim ImportoPassato As Currency 'Usare l'elemento della griglia
Dim Q As Long
Dim X As Long
For X = 1 To 1000 'Invece di 1000 il numero di elementi
For Q = 1 To QuanteCat
If Cat(Q) = CatPassata Then
TotaleCat(QuanteCat) = TotaleCat(QuanteCat) + ImportoPassato
GoTo Trovato
End If
Next Q
QuanteCat = QuanteCat + 1
Cat(QuanteCat) = CatPassata
TotaleCat(QuanteCat) = ImportoPassato
Trovato:
Next X
' Alla fine trovi:
' QuanteCat = Quante categorie
' Con le categorie in Cat
' ed i totali in TotaleCat

Ciao Jayelef
Sauro
Jayelef 10 Dic 2014 19:00
Il giorno venerdì 5 dicembre 2014 16:07:47 UTC+1, Sauro ha scritto:
> [cut]
>
> Dim Cat(1 To 1000) As String
> Dim TotaleCat(1 To 1000) As Currency
> Dim QuanteCat As Long
> Dim CatPassata As String 'Usare l'elemento della griglia
> Dim ImportoPassato As Currency 'Usare l'elemento della griglia
> Dim Q As Long
> Dim X As Long
> For X = 1 To 1000 'Invece di 1000 il numero di elementi
> For Q = 1 To QuanteCat
> If Cat(Q) = CatPassata Then
> TotaleCat(QuanteCat) = TotaleCat(QuanteCat) + ImportoPassato
> GoTo Trovato
> End If
> Next Q
> QuanteCat = QuanteCat + 1
> Cat(QuanteCat) = CatPassata
> TotaleCat(QuanteCat) = ImportoPassato
> Trovato:
> Next X
> ' Alla fine trovi:
> ' QuanteCat = Quante categorie
> ' Con le categorie in Cat
> ' ed i totali in TotaleCat
>
> Ciao Jayelef
> Sauro

Grazie infinite Sauro.
Mi sono accorto solo adesso della tua risposta perché nel frattempo con carta e
penna(!) avevo strutturato un ciclo molto simile al tuo che mi ha permesso di
giungere alla conclusione medesima!
Ad esser sinceri il mio è sostanziosamente più lungo, ma sono contento
ugualmente di aver raggiunto l'obiettivo. L'ho appena testato e funziona
correttamente.

Jay
Jayelef 10 Dic 2014 19:01
Il giorno venerdì 5 dicembre 2014 12:41:33 UTC+1, Franz_aRTiglio ha scritto:
> Jayelef ha detto questo venerdì :
>> Buongiorno a voi tutti,
>>
>> non riesco ad impostare *****iticamente un algoritmo che dovrebbe
consentirmi
>> di effettuare la scrematura / raggruppamento dei dati di una griglia. Nello
>> specifico, accade che tramite input utente, inserisco in una griglia i
>> seguenti dati nelle rispettive colonne:
>>
>> Nome - Quota Associativa - Categoria
>>
>> Gianni 500,00 A
>> Dario 150,00 A
>> Marcello 25,00 B
>> Luigi 100,00 A
>
> La domanda è poco chiara... vuoi ordinarli per ? alfabetico ? quota ?
> categoria ? andando a naso vorresti ordinarli per categoria; quante
> categorie ci sono ?
>
> Comunque, una via percorribile è quella di scorrere l'intera griglia
> usando un comparatore di categoria e riempire una variabile ad indice
> con i risultati tramite un puntatore, quindi ri-popolare la griglia con
> i risultati ordinati.
>
> Considerando di ordinare la sola categoria da una flexgrid, codice
> scritto A BRACCIO:
>
> Sub OrdinaGriglia()
> Dim ValoriOrdinati(GrigliadaOrdinare.rows) as String
> Dim Puntatore as Integer, Categoria as byte, NumeroVoci as integer
> NumeroVoci = GrigliadaOrdinare.rows ' totale voci da sistemare
> For Categoria = 65 to 90 ' categorie da A a Z
> For Puntatore = 0 to GrigliadaOrdinare.rows
> If Asc(GrigliadaOrdinare.TextMatrix(Puntatore,2)) = Categoria Then
> ValoriOrdinati(NumeroVoci) = GrigliadaOrdinare.TextMatrix(Puntatore,0) _
> & VbTab & GrigliadaOrdinare.TextMatrix(Puntatore,1) _
> & VbTab & GrigliadaOrdinare.TextMatrix(Puntatore,2)
> NumeroVoci = NumeroVoci -1
> End if
> Next Puntatore
> If NumeroVoci = 0 Then Exit For
> Next Categoria
> NumeroVoci = GrigliadaOrdinare.rows ' ricarico il contatore
> GrigliadaOrdinare.clear
> For Puntatore = NumeroVoci to 0 step -1
> GrigliadaOrdinare.Additem ValoriOrdinati(Puntatore)
> Next Puntatore
> End Sub

Scusa Franz...grazie anche a te.
Franz_aRTiglio 10 Dic 2014 21:51
Scriveva Jayelef mercoledì, 10/12/2014:

> Scusa Franz...grazie anche a te.

Scusa di che ? :)

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio Visual Basic di Microsoft | Tutti i gruppi | it.comp.lang.visual-basic | Notizie e discussioni visual basic | Visual basic Mobile | Servizio di consultazione news.