Newsgroup: it.comp.lang.visual-basic
Titolo: VB6 Raggruppamento dati di una griglia

Buongiorno a voi tutti,
 
non riesco ad impostare analiticamente 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.
 

 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

[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


Scusa Franz...grazie anche a te.

 Scusa Franz...grazie anche a te.
 
Scusa di che ?  :)