Autore Topic: [RISOLTO] Allineamento dati su una GridView  (Letto 1002 volte)

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
[RISOLTO] Allineamento dati su una GridView
« il: 18 Marzo 2011, 01:16:52 »
Ho un problema di allineamento su una GridView, vi faccio un esempio per spiegarmi
Codice: gambas [Seleziona]

PUBBLIC SUB Button_Click()
  DIM i AS Integer
  DIM dResult AS Result
  DIM dSQL AS String

  GridView1.Columns.Count = 4
  GridView1.Columns[0].Title = "Località"
  GridView1.Columns[1].Title = "Garanzia 1"
  GridView1.Columns[2].Title = "Garanzia 2"
  GridView1.Columns[3].Title = "Garanzia 3"

  WITH GridView1
    .Columns[0].Width = 200
    .Columns[1].Width = 150
    .Columns[2].Width = 150
    .Columns[3].Width = 150
  END WITH

      dSQL = "SELECT localita, codiceintervento, count(*) AS totale"
      dSQL &= " FROM interventi"
      dSQL &= " WHERE anno = 11"
      dSQL &= " GROUP BY localita, codiceintervento"
      dSQL &= " ORDER BY localita"
      dResult = Connection.db.Exec(dSQL)

      GridView1.Rows.Count = dResult.Count
      GridView1.Columns.Count = 4
      GridView1.Clear

      FOR EACH dResult
        i = dResult.Index

        GridView1[i, 0].Text = dResult["localita"]
        IF dResult!codiceintervento = "66" THEN GridView1[i, 1].Text = dResult["totale"]
        IF dResult!codiceintervento = "62" THEN GridView1[i, 2].Text = dResult["totale"]
        IF dResult!codiceintervento = "58" THEN GridView1[i, 3].Text = dResult["totale"]
      NEXT
END


con questo codice ottengo questo risultato:

LOCALITA'      GARANZIA 1     GARANZIA 2   GARANZIA 3
Milano                3
Milano                                      1  
Roma                 1
Roma                                       2
Roma                                                           1

io vorrei che i dati (i numeri) relativi alla stessa località venissero visualizzati sulla stessa riga della GridView
« Ultima modifica: 19 Marzo 2011, 02:19:22 da tornu »
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Allineamento dati su una GridView
« Risposta #1 il: 18 Marzo 2011, 09:50:53 »
Ciao,
Intendi raggruppare cosi?
LOCALITA'      GARANZIA 1     GARANZIA 2   GARANZIA 3
Milano                3                     1
Roma                 1                     2                  1

se è così non basta fare una query di raggruppamento? credo, ma forse ho inteso male

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: Allineamento dati su una GridView
« Risposta #2 il: 18 Marzo 2011, 15:52:10 »
Ciao Golia,
hai capito perfettamente ciò che intendevo,

se è così non basta fare una query di raggruppamento? credo, ma forse ho inteso male
io ne ho provato di tutti i tipi ma non ne sono venuto fuori.
Se hai qualche idea ti sarei infinitamente grato.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Allineamento dati su una GridView
« Risposta #3 il: 18 Marzo 2011, 22:40:18 »
questa query, grazie a subquery, ti raggruppa i record come vuoi tu nei seguenti campi: localita, garanzia1, garanzia2 e garanzia3

Codice: sql [Seleziona]
SELECT citta.localita AS localita, garanzia1.intervento AS garanzia1, garanzia2.intervento AS garanzia2, garanzia3.intervento AS garanzia3
FROM (SELECT localita FROM interventi GROUP BY localita) AS citta LEFT JOIN
     (SELECT localita, count(*) as intervento FROM interventi WHERE anno=11 AND codiceintervento=66 GROUP BY localita) AS garanzia1 ON citta.localita = garanzia1.localita LEFT JOIN
     (SELECT localita, count(*) as intervento FROM interventi WHERE anno=11 AND codiceintervento=62 GROUP BY localita) AS garanzia2 ON citta.localita = garanzia2.localita LEFT JOIN
     (SELECT localita, count(*) as intervento FROM interventi WHERE anno=11 AND codiceintervento=58 GROUP BY localita) AS garanzia3 ON citta.localita = garanzia3.localita
ORDER BY citta.localita;


Il problema e' che ti tocchera' fare una subquery per ogni codice intervento... forse ti conviene buttar giu' un po' di codice per raggruppare il tutto direttamente sulla griglia

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: Allineamento dati su una GridView
« Risposta #4 il: 18 Marzo 2011, 23:19:22 »
Ciao milio, grazie per la risposta
non posso applicare il suggerimento che mi hai dato perchè hai inserito nella Select dei campi che nel DB non esistono, Garanzia 1, Garanzia 2, ecc.
sono le intestazioni delle colonne della GridView, che io ho schematizzato nel mio post per semplificare e forse ti hanno confuso.

Come mi hai suggerito tu ho provato a raggrupare da codice sfruttando la GridView, ma non ci sono riuscito.
Visto che sei un 'esperto di GridView, hai qualche suggerimento da darmi? :-[
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Allineamento dati su una GridView
« Risposta #5 il: 19 Marzo 2011, 00:02:30 »
Sono subquery, garanzia1, 2 e 3 sono solo etichette... l'hai provata?

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: Allineamento dati su una GridView
« Risposta #6 il: 19 Marzo 2011, 00:31:37 »
Scusami milio ma leggendola senza provarla così di getto non l'avevo capita.
L'ho provata e funziona perfettamente  :ok: e ti ringrazio tantissimo, l'unica cosa e che mi da anche le località con "Garanzie" zero, se per caso hai qualche minuto magari per perfezionarla.... ;)
intanto ci provo io e provo anche a  popolare la GridView...per il momento grazie tanto...
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Allineamento dati su una GridView
« Risposta #7 il: 19 Marzo 2011, 00:36:50 »
se ho capito ene  dovresti fare cosi':

SELECT citta.localita AS localita, garanzia1.intervento AS garanzia1, garanzia2.intervento AS garanzia2, garanzia3.intervento AS garanzia3 
FROM (SELECT localita FROM interventi WHERE anno=11 GROUP BY localita  HAVING count(*)>0 ) AS citta LEFT JOIN 
    (SELECT localita, count(*) as intervento FROM interventi WHERE anno=11 AND codiceintervento=66 GROUP BY localita) AS garanzia1 ON citta.localita = garanzia1.localita LEFT JOIN 
    (SELECT localita, count(*) as intervento FROM interventi WHERE anno=11 AND codiceintervento=62 GROUP BY localita) AS garanzia2 ON citta.localita = garanzia2.localita LEFT JOIN 
    (SELECT localita, count(*) as intervento FROM interventi WHERE anno=11 AND codiceintervento=58 GROUP BY localita) AS garanzia3 ON citta.localita = garanzia3.localita 
ORDER BY citta.localita;

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: Allineamento dati su una GridView
« Risposta #8 il: 19 Marzo 2011, 01:07:47 »
anzi ho detto un stronz...

Codice: sql [Seleziona]
SELECT citta.localita AS localita, CASE WHEN garanzia1.intervento<>0 THEN  garanzia1.intervento ELSE 0 END AS garanzia1, 
                                                   CASE WHEN garanzia2.intervento<>0 THEN  garanzia2.intervento ELSE 0 END AS garanzia2,
                                                   CASE WHEN garanzia3.intervento<>0 THEN  garanzia3.intervento ELSE 0 END AS garanzia3
FROM (SELECT localita FROM interventi WHERE anno=11 GROUP BY localita) AS citta LEFT JOIN  
    (SELECT localita, count(*) as intervento FROM interventi WHERE anno=11 AND codiceintervento=66 GROUP BY localita) AS garanzia1 ON citta.localita = garanzia1.localita LEFT JOIN  
    (SELECT localita, count(*) as intervento FROM interventi WHERE anno=11 AND codiceintervento=62 GROUP BY localita) AS garanzia2 ON citta.localita = garanzia2.localita LEFT JOIN  
    (SELECT localita, count(*) as intervento FROM interventi WHERE anno=11 AND codiceintervento=58 GROUP BY localita) AS garanzia3 ON citta.localita = garanzia3.localita  
WHERE (garanzia1+garanzia2+garanzia3) > 0
ORDER BY citta.localita;

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: Allineamento dati su una GridView
« Risposta #9 il: 19 Marzo 2011, 02:18:35 »
Grande milio  :ok: :ok:
ti ringrazio davvero dell'aiuto  :2birre:
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)