Didacticiel : personnalisation d'un graphique avec des événements
Ce didacticiel montre comment utiliser des événements pour personnaliser votre graphique.Vous allez ajouter un marqueur personnalisé au point de données maximal afin de mettre en surbrillance le commercial qui a les ventes les plus élevées cette année.
Pour effectuer ce didacticiel, vous devez avoir effectué au préalable Didacticiel : liaison de données entre un graphique et une base de données.
Ajout de l'espace de noms du graphique
Pour commencer, ouvrez le fichier code-behind dans votre application ASP.NET ou basculez en mode Code dans votre application Windows Forms.
En haut du fichier de code, ajoutez l'espace de noms du graphique comme indiqué ci-dessous.
' For Windows Forms
Imports System.Windows.Forms.DataVisualization.Charting
' For ASP.NET
Imports System.Web.UI.DataVisualization.Charting
// For Windows Forms
using System.Windows.Forms.DataVisualization.Charting;
// For ASP.NET
using System.Web.UI.DataVisualization.Charting;
Ajout de l'événement PostPaint
Ajoutez un gestionnaire d'événements pour l'événement Chart.PostPaint.
Dans Windows Forms, vous devez le faire à partir du constructeur du formulaire, juste après la méthode InitializeComponent.Dans ASP.NET, vous devez le faire dans la méthode de gestionnaire d'événements Page_Load créée automatiquement.
AddHandler Me.Chart1.PostPaint, AddressOf Chart1_PostPaint
this.Chart1.PostPaint += new EventHandler<ChartPaintEventArgs>(Chart1_PostPaint);
Ajoutez ensuite la définition de méthode pour le gestionnaire d'événements que vous venez d'inscrire.Pour ce faire, ajoutez le code suivant à la définition de classe.
Private Sub Chart1_PostPaint(ByVal sender As Object, ByVal e As ChartPaintEventArgs)
End Sub
void Chart1_PostPaint(object sender, ChartPaintEventArgs e)
{
}
Effectuer le dessin personnalisé
Vous allez maintenant ajouter du code personnalisé afin de mettre en surbrillance le commercial qui a les ventes les plus élevées cette année.Pour ce faire, ajoutez le code ci-dessous au gestionnaire d'événements Chart1_PostPaint que vous venez de créer, enregistrez le fichier, puis exécutez votre application.
' Make sure all series have been drawn before proceeding
If TypeOf e.ChartElement Is Series AndAlso DirectCast(e.ChartElement, Series).Name = "Series2" Then
Dim s As Series = e.Chart.Series(0)
Dim cg As ChartGraphics = e.ChartGraphics
Dim max As Double = s.Points.FindMaxByValue().YValues(0)
' Highlight the maximum sales this year
For i As Integer = 0 To s.Points.Count - 1
If s.Points(i).YValues(0) = max Then
' Get relative coordinates of the data point
Dim pos As System.Drawing.PointF = System.Drawing.PointF.Empty
pos.X = CSng(cg.GetPositionFromAxis("ChartArea1", AxisName.X, i+1))
pos.Y = CSng(cg.GetPositionFromAxis("ChartArea1", AxisName.Y, max))
' Convert relative coordinates to absolute coordinates.
pos = cg.GetAbsolutePoint(pos)
' Draw concentric circles at the data point
For radius As Integer = 10 To 39 Step 10
cg.Graphics.DrawEllipse(System.Drawing.Pens.Red, _
CSng(pos.X - radius / 2), _
CSng(pos.Y - radius / 2), radius, radius)
Next
End If
Next
End If
// Make sure all series have been drawn before proceeding
if (e.ChartElement is Series && ((Series)e.ChartElement).Name == "Series2" )
{
Series s = e.Chart.Series[0];
ChartGraphics cg = e.ChartGraphics;
double max = s.Points.FindMaxByValue().YValues[0];
// Highlight the maximum sales this year
for(int i = 0; i < s.Points.Count; i++)
{
if(s.Points[i].YValues[0] == max)
{
// Get relative coordinates of the data point
System.Drawing.PointF pos = System.Drawing.PointF.Empty;
pos.X = (float)cg.GetPositionFromAxis("ChartArea1", AxisName.X, i);
pos.Y = (float)cg.GetPositionFromAxis("ChartArea1", AxisName.Y, max);
// Convert relative coordinates to absolute coordinates.
pos = cg.GetAbsolutePoint(pos);
// Draw concentric circles at the data point
for (int radius = 10; radius < 40; radius += 10)
{
cg.Graphics.DrawEllipse(
System.Drawing.Pens.Red,
pos.X - radius / 2,
pos.Y - radius / 2,
radius, radius);
}
}
}
}
Voir aussi
Référence
System.Windows.Forms.DataVisualization.Charting
System.Web.UI.DataVisualization.Charting
Concepts
Personnalisation et événements