Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieses Lernprogramm veranschaulicht, wie Sie mithilfe von Ereignissen ein Diagramm anpassen. Sie fügen am Maximum-Datenpunkt eine benutzerdefinierte Markierung hinzu, um den Mitarbeiter mit dem höchsten Umsatz in diesem Jahr hervorzuheben.
Um dieses Lernprogramm durchführen zu können, müssen Sie zunächst das Lernprogramm: Datenbindung eines Diagramms an eine Datenbank bearbeiten.
Hinzufügen des Diagrammnamespace
Öffnen Sie zunächst die CodeBehind-Datei in der ASP.NET-Anwendung, oder wechseln Sie in der Windows Forms-Anwendung in die Codeansicht.
Fügen Sie oben in der Codedatei den Diagrammnamespace ein, wie unten dargestellt.
' 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;
Hinzufügen des PostPaint-Ereignisses
Fügen Sie einen Ereignishandler für das Chart.PostPaint-Ereignis hinzu.
In Windows Forms führen Sie dies im Konstruktor des Formulars nach der InitializeComponent-Methode durch. In ASP.NET führen Sie dies in der Page_Load-Ereignishandlermethode durch, die automatisch erstellt wird.
AddHandler Me.Chart1.PostPaint, AddressOf Chart1_PostPaint
this.Chart1.PostPaint += new EventHandler<ChartPaintEventArgs>(Chart1_PostPaint);
Fügen Sie dann die Methodendefinition für den Ereignishandler hinzu, den Sie gerade registriert haben. Fügen Sie dazu den folgenden Code in die Klassendefinition ein.
Private Sub Chart1_PostPaint(ByVal sender As Object, ByVal e As ChartPaintEventArgs)
End Sub
void Chart1_PostPaint(object sender, ChartPaintEventArgs e)
{
}
Ausführen von benutzerdefinierten Farbmarkierungen
Sie fügen nun benutzerdefinierten Code hinzu, mit dem der Vertriebsmitarbeiter hervorgehoben wird, der in diesem Jahr den höchsten Umsatz erzielt hat. Fügen Sie dazu dem Chart1_PostPaint-Ereignishandler, den Sie gerade erstellt haben, den unten aufgeführten Code hinzu, speichern Sie die Datei, und führen Sie die Anwendung aus:
' 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);
}
}
}
}
Siehe auch
Verweis
System.Windows.Forms.DataVisualization.Charting
System.Web.UI.DataVisualization.Charting