Génération de graphique lié à une bdd


Contenu du snippet

Voila grâce à mon code source, on peut afficher un graph qui reste proportionnelle à la taille de l'image souhaité. Du style je choisi une taille de 640 x480 et bein mon graphe gardera les proportions, automatiquement l'echelle se paramétra Ma source est facile à modifier. tout est expliquer normalement. Bon dev
(Merci pour vos sources, j'ai piqué qq sources pour arriver a faire ça)

Source / Exemple :


Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
dim base,title
dim imagex As Integer,imagey As Integer
dim rectx As Integer,recty As Integer
dim axeXg As Integer,axeXh As Integer,axeXe As Integer,axeXl As Integer
dim axeYg As Integer,axeYh As Integer,axeYe As Integer,axeYl As Integer
dim Ech,Esp, Ep as long
dim PEYy,PEYx,PEXy,PEXx as integer
dim LX,LY as string
dim taille as integer
'Je recupére le form pour savoir qu'elle est ma taille
' voir plus loin pour comprendre

taille=Request.Form("Ta")

'Grace à une selection prcedente  je peux choisir ma base
'base=mabase

base=Request.Form("chbase")

'Taille de L'image (550x480 proportion par defaut)
' 4 choix possible
'Choix1
if taille=1 then
imagex= 480
imagey= 300
end if
'Choix2
if taille=2 then
imagex= 550
imagey= 480
end if
'Choix3
if taille=3 then
imagex= 640
imagey= 480
end if
'Choix4
if taille=4 then
imagex= 800
imagey= 600
end if

'Encadrement
rectx=imagex-1
recty=imagey-1
'Titre
title="Fabrication 2002"
'Axe des absissce & ordonné

'X
    'position par rapport à la gauche du cadre (Depart à gauche)
    axeXg=10
    'position par rapport au haut du cadre (Depart du Haut)
    axeXh=imagey-30
    ' longueur du trait x
    axeXl=imagex-30
    ' epaisseur du trait x
    axeXe=2

'Y
    'position par rapport à la gauche du cadre (Depart à gauche)
    axeYg=10
    'position par rapport au haut du cadre (Depart du Haut)
    axeYh=50
    ' Epaisseur du trait y
    axeYe=2
    ' Hauteur du trait y
    axeYl=imagey-axeYh-30

'Echelle

    Ech= 100000
    'position legende axe des Y
    PEYy=axeYg+10
    PEYx=axeYh
    'position legende axe des x
    PEXy=axeXl
    PEXx=axeXh-20

    'nom axe X
    LX="Mois"
    'Nom axe Y
    LY="Nb Planches"

'reglage histogramme
    'espace entre les barres (proportionel à la taille)
    Esp=imagex*0.072
    'largeur des barres (proportionel à la taille)
    Ep=imagex*0.018

    Dim DBobjConn As OleDBConnection
    DBobjConn = New OleDBConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Request.MapPath(base))
    DBobjConn.Open()

dim mois(11) as string
Dim a As Integer

mois(0)="janvier"
mois(1)="février"
mois(2)="mars"
mois(3)="avril"
mois(4)="mai"
mois(5)="juin"
mois(6)="juillet"
mois(7)="août"
mois(8)="septembre"
mois(9)="octobre"
mois(10)="novembre"
mois(11)="décembre"

Dim i As Integer
    Dim MaBitMap As New Bitmap(imagex,imagey) ' On créé l'image
    Dim MonObjGfx As Graphics
    Dim MesValeurs(11) As long
    Dim MesValeurs2(11) As long
    Dim Moyenne,moyenne2 As long
    Dim compteur as integer
    compteur=0

for a = 0 to 11

'ma requete ici donne le resultat du nombre de planches fabriquée par mois

     Dim ODDA_ModifTable As New OleDBCommand("SELECT Sum(fabrications.Planches) AS SommeDePlanches FROM fabrications GROUP BY fabrications.Fmois HAVING (((fabrications.Fmois) like '" & mois(a) & "'));",dbobjconn)

     Dim malecture AS OleDbDataReader

     malecture=ODDA_ModifTable.ExecuteReader

     do until not malecture.read

     MesValeurs(a)=malecture("SommeDePlanches")

     loop

     malecture.Close

next
     DBobjConn.Dispose

    Dim MesDescriptions(11) As String

    MesDescriptions(0)="Jan"
    MesDescriptions(1)="fev"
    MesDescriptions(2)="Mar"
    MesDescriptions(3)="Avr"
    MesDescriptions(4)="Mai"
    MesDescriptions(5)="Jun"
    MesDescriptions(6)="Jui"
    MesDescriptions(7)="Aou"
    MesDescriptions(8)="Sep"
    MesDescriptions(9)="Oct"
    MesDescriptions(10)="Nov"
    MesDescriptions(11)="Dec"

    MonObjGfx = Graphics.FromImage(MaBitMap)
    ' On met un fond blanc
    MonObjGfx.Clear(Color.White)
    ' On trace un rectangle tout autour de notre image
    MonObjGfx.DrawRectangle(Pens.Black, 0, 0, rectx, recty)
    ' On donne titre à notre graphique
    MonObjGfx.DrawString(title, New Font("Verdana", 16, FontStyle.Bold), Brushes.Black, New PointF(5, 5))
' On trace l'axe des absisse et ordonné
        MonObjGfx.FillRectangle(New SolidBrush(Color.black), axeYg,axeYh, axeYe,axeYl) 'y
        MonObjGfx.FillRectangle(New SolidBrush(Color.black), axeXg,axeXh, axeXl,axeXe) 'x

    For i = 0 To 11

    'Valeur mise en varible 2

      MesValeurs2(i) = formatnumber(MesValeurs(i),0)

    'reglage de l'echelle automatique

      MesValeurs(i)=formatnumber((MesValeurs(i)*axeYl)/Ech,0)

        ' On trace le rectangle de couleur Bleu
        MonObjGfx.FillRectangle(New SolidBrush(Color.Blue), ((i + 1) * Esp), axeXh - MesValeurs(i), Ep,MesValeurs(i))

        ' Histoire de rendre un peu plus beau notre histogramme, on met un contour pour chaque barre
        MonObjGfx.DrawRectangle(Pens.Black, ((i + 1) * Esp), axeXh - MesValeurs(i), Ep, MesValeurs(i))

        ' On affiche les valeurs a 10px dessus des barres

        MonObjGfx.DrawString(MesValeurs2(i).ToString, New Font("Arial", 8), Brushes.Red, ((i + 1) * Esp), axeXh - MesValeurs(i)-10)

        MonObjGfx.DrawString(MesDescriptions(i).ToString, New Font("Arial", 8), Brushes.Green, ((i + 1) * Esp), axeXh)

    'mise en varible des valeurs de la moyenne
    moyenne=moyenne+MesValeurs(i)
    moyenne2=moyenne2+MesValeurs2(i)

    if Mesvaleurs2(i) <>0 then
    compteur=compteur+1
    end if

    Next
    'calcul de la moyenne 1 et 2
    moyenne=moyenne/compteur
    moyenne2=moyenne2/compteur
    'Tracé le trait de la moyenne

    MonObjGfx.FillRectangle(New SolidBrush(Color.red), axeXg,axeXh - moyenne, axeXl,axeXe) 'x
     ' valeur de la moyenne
    MonObjGfx.DrawString(moyenne2.ToString, New Font("Arial", 8), Brushes.red,PEXy-20 , axeXh - moyenne-20)

    ' Legende Axe des Y

    MonObjGfx.DrawString(LY.ToString, New Font("Arial", 8), Brushes.Black, PEYy, PEYx)

    ' Legende Axe des X

    MonObjGfx.DrawString(LX.ToString, New Font("Arial", 8), Brushes.Black, PEXy, PEXx)

    ' On "balance" le graph au format Gif ou jpeg
    MaBitMap.Save(Response.OutputStream, ImageFormat.Gif)

End Sub

Conclusion :


Merci à tous, notre union fait la force, vous pouvez me laisser des messages, pour des questions.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.