|
|
|
![]() |
|
Strumenti |
![]() |
#1 | ||
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
[VB.NET] Problema con libreria ZedGraph
Buonasera,
sto sviluppando un gestionale per bilancio familiare. Nel database ho una tabella che si chiama gruppoentrate(id,gruppo) e un'altra che si chiama entrate(id,data,importo,descrizione,saldata,idgruppo) dove tra le due c'è una relazione 1 a molti tra gruppoentrate.id e entrate.idgruppo. Posto il codice per creare il grafico: Codice:
Private Sub CreaGrafico() Dim myPane As GraphPane = zgcGrafico.GraphPane Dim titolo, asseX As String Dim sql, saldate, nomesaldate As String Dim list = New PointPairList() titolo = "Statistiche per Gruppi nell'anno " & dtpAnno.Value.Year & " , Gruppo: Tutti" asseX = "Gruppi" ' Set Titolo e Nome Assi myPane.Title.Text = titolo myPane.XAxis.Title.Text = "Mesi" myPane.YAxis.Title.Text = "Valore (€)" 'Query sql = "SELECT idgruppo,SUM(importo) AS sommai " & _ "FROM entrate " & _ "WHERE Year(data)=" & dtpAnno.Value.Year & " ' GROUP BY idgruppo" 'esegue la query Dim cmd As New OleDbCommand(sql, Cn) Dim dr As OleDbDataReader Try 'inserisce il risultato nel datareader dr = cmd.ExecuteReader 'legge il datareader While dr.Read() Dim importo As Double If dr.IsDBNull(1) = False Then importo = dr.Item("sommai") Else importo = 0 End If list.Add(dr.Item("id"), importo) End While dr.Close() Catch ex As Exception MessageBox.Show("Errore: " & ex.Message.ToString, "Errore..", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) Exit Sub End Try End Select ' Genero la barra con la leggenda Dim myBar As BarItem = myPane.AddBar("Entrate (Saldate: Tutte)", list, Color.Blue) ' Riempio lo sfondo degli assi con un colore gradiente myPane.Chart.Fill = New Fill(Color.White, Color.LightGoldenrodYellow, 45.0F) myPane.Fill = New Fill(Color.White, Color.FromArgb(220, 220, 255), 45.0F) myPane.XAxis.Scale.FontSpec.Angle = 90 myPane.XAxis.MajorTic.IsBetweenLabels = True myPane.YAxis.Scale.Format = "C" zgcGrafico.IsShowPointValues = True ' Calculate the Axis Scale Ranges zgcGrafico.AxisChange() End Sub
e fin qui tutto ok adesso al posto dell'idgruppo sull'assex vorrei visualizzare il nome del gruppo dovrei cambiare la query in questo modo: Codice:
'Query sql = "SELECT gruppo,SUM(importo) AS sommai " & _ "FROM gruppoentrate INNER JOIN entrate ON gruppoentrate.id = entrate.idgruppo " & _ "WHERE Year(data)=" & dtpAnno.Value.Year & " ' GROUP BY gruppo" 'esegue la query Dim cmd As New OleDbCommand(sql, Cn) Dim dr As OleDbDataReader Try 'inserisce il risultato nel datareader dr = cmd.ExecuteReader 'legge il datareader While dr.Read() Dim importo As Double If dr.IsDBNull(1) = False Then importo = dr.Item("sommai") Else importo = 0 End If list.Add(dr.Item("gruppo"), importo) End While dr.Close() Dim myBar As BarItem = myPane.AddBar("Entrate (Saldate: Tutte)", list, Color.Blue) Come posso fare per visualizzare i nomi del gruppo? Grazie in anticipo a tutti |
||
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
up
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
up
![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jan 2007
Messaggi: 404
|
Sono riuscito a risolvere il problema.
Lo posto così se può servire a qualcun'altro che ha lo stesso problema: Ho modificato la query dove prima utilizzavo un pointparlist() adesso invece utilizzo un datasourcepointlist() dove lo chiamp dspl: Codice:
sql = "SELECT gruppo,SUM(importo) AS sommai " & _ "FROM gruppoentrate INNER JOIN entrate ON gruppoentrate.id = entrate.idgruppo " & _ "WHERE Year(data)=" & dtpAnno.Value.Year & " AND Saldata<>'" & saldate & "' GROUP BY gruppo" Dim DS As New DataSet 'Variabile per DataSet Dim DA As OleDb.OleDbDataAdapter 'crea il dataadapter Try 'Dataset DS = New DataSet("entrate") 'DataAdapter DA = New OleDb.OleDbDataAdapter(sql, Cn) DA.Fill(DS, "entrate") dspl.DataSource = DS.Tables(0) dspl.XDataMember = "gruppo" dspl.YDataMember = "sommai" Catch ex As Exception MessageBox.Show("Errore: " & ex.Message.ToString, "Errore..", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) Exit Sub End Try Codice:
myPane.XAxis.Scale.FontSpec.Angle = 90 Dim nomegruppo(dgwRiepilogo.Rows.Count - 1) As String For i = 0 To dgwRiepilogo.Rows.Count - 1 nomegruppo(i) = dgwRiepilogo.Item(0, i).Value Next myPane.XAxis.Type = AxisType.Text myPane.XAxis.Scale.TextLabels = nomegruppo Codice:
Dim myCurve As BarItem = myPane.AddBar("Entrate (Saldate: " & nomesaldate & ")", dspl, Color.Blue) |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:47.