[VB NET 2005] Grafico Excel

mercoledì 01 ottobre 2008 - 22.30

alexmed Profilo | Guru

Ciao a tutti
Qualcuno saprebbe dirmi se è possibile replicare il comportamento dell'asse verticale (X) dei grafici excel?

Grazie a chiunque mi dia una dritta.

DomA Profilo | Expert

Non so se in vb 2005 c'è un controllo Chart (credo di si, ma non l'ho mai utilizzato). Tuttavia, se ti serve un grafico, che ne diresti di inserire i dati in una tabella del db e poi creare un report.
ciao

Domenico

alexmed Profilo | Guru

Ciao,
Ho dimenticato di specificare che uso la versione Express, quindi niente report.

In realtà ho già tutto per la creazione del grafico, mi manca solo l'adattamento dell'asse delle X (quella degli importi) e mi piacerebbe replicare appunto lo stesso comportamento che ha excel.

E' da un pò che la ci stò studiando su ma alla fine non nè vengo a capo e adesso stà diventando una questione di principio!

ERRATA CORRIGE non è l'asse delle X ma quella delle Y (quella verticale)

Harley.Net82 Profilo | Junior Member

Ciao.
Non avendo a disposizione un Tool per i grafici, ciò che puoi fare è Disegnartelo da te
tramite l' oggetto Graphics.
Purtroppo c' è da scrivere un po di codice.

Harley.Net82 Profilo | Junior Member

Ti posto un esempio (molto scarno ma rende l' idea)

Private Sub DisegnaGrafico() 'Dichiaro un PictureBox e lo aggiungo al form Dim Pict As New PictureBox Pict.Width = 263 Pict.Height = 162 Pict.Left = 5 Pict.Top = 5 Me.Controls.Add(Pict) 'Dichiaro un Bitmap Dim Bmp As Bitmap = New Bitmap(Pict.Width, Pict.Height) 'Dichiaro l' oggetto Graphics per disegnare sul Bitmap Dim Gr As Graphics = Graphics.FromImage(Bmp) 'Riempio di bianco l' Immagine Gr.FillRectangle(Brushes.White, 0, 0, Pict.Width, Pict.Height) 'Disegno l' asse Y Gr.DrawLine(Pens.Black, 10, 10, 10, Pict.Height - 10) 'Disegno l'asse X Gr.DrawLine(Pens.Black, 10, Pict.Height - 10, Pict.Width - 10, Pict.Height - 10) 'Disegno la linea che rappresenta dati Gr.DrawLine(Pens.Red, 10, Pict.Height - 50, 50, Pict.Height - 20) Gr.DrawLine(Pens.Red, 50, Pict.Height - 20, 100, Pict.Height - 50) Gr.DrawLine(Pens.Red, 100, Pict.Height - 50, 150, Pict.Height - 20) Gr.DrawLine(Pens.Red, 150, Pict.Height - 20, 200, Pict.Height - 50) Gr.DrawLine(Pens.Red, 200, Pict.Height - 50, 250, Pict.Height - 20) 'associo la bitmap alla picturebox Pict.Image = Bmp End Sub

Si capisce che una volta chiaro il concetto e con un po di pazienza
uno puo disegnare cio che vuole!!

alexmed Profilo | Guru

Ciao Harley.Net82 e grazie per l'interessamento.
ma il mio problema non è tanto disegnare il grafico, ma piuttosto impostare l'asse delle Y.
il grafico preleva i dati da una query che mi restituisce degli importi.
vado a cercarmi l'importo più alto ed imposto una proporzione con l'altezza della PictureBox che ospita il grafico.
Di conseguenza gli altri valori vengono calcolati in base a questa proporzione.

Ora:
Mi piacerebbe che l'asse degli importi (l'asse Y) avesse lo stesso comportamento di Excel ovvero:

Se tu ad esempio in un Grafico con una cella sola imposti un valore di 1 avrai la scala delle Y con un valore max di 1,2

se imposti 2 avrai Ymax = 2,5
se imposti 3 avrai Ymax = 3,5
se imposti 4 avrai Ymax = 4,5
se imposti 5 avrai Ymax = 6
se imposti 6 avrai Ymax = 7
se imposti 7 avrai Ymax = 8
se imposti 8 avrai Ymax = 9
se imposti 9 avrai Ymax = 10
se imposti 10 avrai Ymax = 12
se imposti 20 avrai Ymax =25
e così via

ho provato in mille modi ma non riesco a capire quale calcolo esegue excel per avere questa proporzione

inoltre ho notato questo:

se io imposto la cella ad esempio a 1333,33 mi imposta 1400,00 se imposto 1333,34 mi imposta 1600,00

Se riuscissi a risolvere il mistero i grafici assumerebbero un aspetto più gradevole.

Grazie





Harley.Net82 Profilo | Junior Member

Ciao, tu mi hai scritto questo:

se imposti 2 avrai Ymax = 2,5
se imposti 3 avrai Ymax = 3,5
se imposti 4 avrai Ymax = 4,5
se imposti 5 avrai Ymax = 6
se imposti 6 avrai Ymax = 7
se imposti 7 avrai Ymax = 8
se imposti 8 avrai Ymax = 9
se imposti 9 avrai Ymax = 10
se imposti 10 avrai Ymax = 12
se imposti 20 avrai Ymax =25

Mi sembra di notare che, Ymax è sempre un 20% in + del valore massimo che hai sulla Y.
A volte bisogna arrotondare, ma all' incirca ci siamo
ad esempio:

2 / 2.5 = 0.8
3 / 3.5 = 0.85
8 / 9 = 0.88
20/25 = 0.8

Provali tutti, noterai che è come ti dico.
Ciao

alexmed Profilo | Guru

Ciao Harley.Net82
Ti ringrazio per il tempo che hai dedicato a questa cosa, ma purtroppo è proprio perchè ho esaurito i tentativi che mi sono rivolto al forum.
La mia unica speranza è che qualcuno sappia l'algoritmo e che possa condividerlo altrimenti proverò altre strade.

Grazie ancora.

Harley.Net82 Profilo | Junior Member

Figurati, speravo che saremmo riusciti a risolvere il problema.

Ciao

nicorvp Profilo | Newbie

Ciao
sto cercando di fare la stessa cosa di alexmed.
Qualcuno ha trovato la risposta?

alexmed Profilo | Guru

Ciao
Quel progetto per ora è nel dimenticatoio in attesa di sviluppi: dammi il tempo di rivederlo un attimo e ti faccio sapere se avevo risolto.
Se ti può servire in VB 2010 (nella RC) ho visto che hanno introdotto un controllo Chart
Se utilizzi 2008 guarda qui:
http://code.msdn.microsoft.com/mschart

Ciao

alexmed
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5