|
|||||||
|
|
|
![]() |
|
|
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: 15:46.



















