Asp.net - user control simple de graphique de répartition

Description

Il est souvent pratique dans des projets internes de faire des statistiques sur des réponses (par exemple dans le cadre d'un sondage), en gros savoir combien de personne a choisi telle réponse.
Mais il est encore mieu de pouvoir faire un petit graphique qui donne une idée générale très rapidement (un petit histogramme simple).
Je vous fourni donc un petit exemple simple sous forme de User Control avec 5 réponses que vous pouvez adapter à loisir dans vos propres projets.

Source / Exemple :


' Code source du fichier ASCX 

<%@ Control Language="vb" AutoEventWireup="false" Codebehind="GraphRepartition.ascx.vb" Inherits="MonProjet.GraphRepartition" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<TABLE id="GraphRepartition" height="30" cellSpacing="1" cellPadding="1" width="50" border="0" runat="server">
 <TR>
  <TD vAlign="bottom" align="middle" width="10" height="30"><asp:image id="ImageVal5" runat="server" Width="10" ImageUrl="/MonProjet/images/BaseGraph5.gif"></asp:image></TD>
  <TD vAlign="bottom" align="middle" width="10" height="30"><asp:image id="ImageVal4" runat="server" Width="10" ImageUrl="/MonProjet/images/BaseGraph4.gif"></asp:image></TD>
  <TD vAlign="bottom" align="middle" width="10" height="30"><asp:image id="ImageVal3" runat="server" Width="10" ImageUrl="/MonProjet/images/BaseGraph3.gif"></asp:image></TD>
  <TD vAlign="bottom" align="middle" width="10" height="30"><asp:image id="ImageVal2" runat="server" Width="10" ImageUrl="/MonProjet/images/BaseGraph2.gif"></asp:image></TD>
  <TD vAlign="bottom" align="middle" width="10" height="30"><asp:image id="ImageVal1" runat="server" Width="10" ImageUrl="/MonProjet/images/BaseGraph1.gif"></asp:image></TD>
 </TR>
</TABLE>

' ------------------------------------------------
' Code Source ASCX.VB

Public MustInherit Class GraphRepartition
    Inherits System.Web.UI.UserControl
    Protected WithEvents ImageVal5 As System.Web.UI.WebControls.Image
    Protected WithEvents ImageVal3 As System.Web.UI.WebControls.Image
    Protected WithEvents ImageVal2 As System.Web.UI.WebControls.Image
    Protected WithEvents ImageVal1 As System.Web.UI.WebControls.Image
    Protected WithEvents ImageVal4 As System.Web.UI.WebControls.Image

    Private _HauteurMax As Integer = 50
    Private _val5 As Integer = 0
    Private _val4 As Integer = 0
    Private _val3 As Integer = 0
    Private _val2 As Integer = 0
    Private _val1 As Integer = 0
    Private _NbReponses As Integer = 1

#Region "Liste des Propriétées Publiques"
    Public Property HauteurMax() As String
        Get
            Return _HauteurMax
        End Get
        Set(ByVal Value As String)
            _HauteurMax = Value
        End Set
    End Property
    Public Property Val5() As String
        Get
            Return _val5
        End Get
        Set(ByVal Value As String)
            _val5 = Value
        End Set
    End Property
    Public Property Val4() As String
        Get
            Return _val4
        End Get
        Set(ByVal Value As String)
            _val4 = Value
        End Set
    End Property
    Public Property Val3() As String
        Get
            Return _val3
        End Get
        Set(ByVal Value As String)
            _val3 = Value
        End Set
    End Property
    Public Property Val2() As String
        Get
            Return _val2
        End Get
        Set(ByVal Value As String)
            _val2 = Value
        End Set
    End Property
    Public Property Val1() As String
        Get
            Return _val1
        End Get
        Set(ByVal Value As String)
            _val1 = Value
        End Set
    End Property
    Public Property NbReponses() As String
        Get
            Return _NbReponses
        End Get
        Set(ByVal Value As String)
            If Value <> 0 Then
                _NbReponses = Value
            End If
        End Set
    End Property
#End Region

#Region " Code généré par le Concepteur Web Form "

    'Cet appel est requis par le Concepteur Web Form.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN : cet appel de méthode est requis par le Concepteur Web Form
        'Ne le modifiez pas en utilisant l'éditeur de code.
        InitializeComponent()
    End Sub

#End Region

    ' -----------------------------------------------------
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        ImageVal5.Style.Add("height", Math.Round(((_val5 * _HauteurMax) / _NbReponses), 0))
        ImageVal4.Style.Add("height", Math.Round(((_val4 * _HauteurMax) / _NbReponses), 0))
        ImageVal3.Style.Add("height", Math.Round(((_val3 * _HauteurMax) / _NbReponses), 0))
        ImageVal2.Style.Add("height", Math.Round(((_val2 * _HauteurMax) / _NbReponses), 0))
        ImageVal1.Style.Add("height", Math.Round(((_val1 * _HauteurMax) / _NbReponses), 0))
    End Sub

    ' -----------------------------------------------------
End Class

' ------------------------------------------------
' Appel simple depuis un Datagrid 

<asp:TemplateColumn HeaderText="" ItemStyle-Width="50">
 <ItemTemplate>
  <uc1:GraphRepartition 
   id="GraphRepartition1" runat="server" 
   Val5='<%# CType(DataBinder.Eval(Container.DataItem,"NbReponse5"), integer)%>' 
   Val4='<%# Ctype(DataBinder.Eval(Container.DataItem,"NbReponse4"), integer)%>' 
   Val3='<%# Ctype(DataBinder.Eval(Container.DataItem,"NbReponse3"), integer)%>' 
   Val2='<%# Ctype(DataBinder.Eval(Container.DataItem,"NbReponse2"), integer)%>' 
   Val1='<%# Ctype(DataBinder.Eval(Container.DataItem,"NbReponse1"), integer)%>' 
   NbReponses= '<%# Ctype(DataBinder.Eval(Container.DataItem,"NbReponseTotal"), integer)%>' 
   HauteurMax='50'>
  </uc1:GraphRepartition>
 </asp:Image>
 </ItemTemplate>
</asp:TemplateColumn>

Conclusion :


Bon Coding

Romelard Fabrice (Alias F___)

Codes Sources

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.