Overview
Each series has a collection of data points, and each data point has an X value, and one or more Y values. It is these values that are examined when a search operation occurs, and data points can be located within a series based on a maximum, minimum, or specified value. This topic discusses how to find data points that are present within a series.
Finding data points with specific values is useful when you want to :
- Check a value range.
- Change the visual appearance (color, markers, etc.) of points that have a certain value.
- Set point labels.
- Use a point's position for custom drawing.
Finding Data Points
The Points collection of the Series class exposes several methods for finding points:
- FindValue: Returns the first point in a series with the specified value.
- FindMaxValue: Returns the first point in a series with the largest value.
- FindMinValue: Returns the first point in a series with the smallest value.
The following are a list of points to note:
- If no points match the search criteria a null value will be returned. To test for a null value in VB use a "Not dataPoint Is Nothing" statement.
- Any point value can be examined (e.g. Y2, X, etc.).
- Each of the methods mentioned above can be used in a loop to locate all points that match a search criteria. To find all points from a pre-defined starting index, use a function definition with a startFromIndex parameter.
- If a startFromIndex parameter is provided and a point matching the search criteria is returned, then the startFromIndex parameter will contain the index of the returned data point, otherwise it will be set to -1.
Example
This example demonstrates how to find data points using the first Y value.
Visual Basic |
Copy Code |
Imports Dundas.Charting.WinControl
...
' Find the first data point with the maximum Y value.
Dim maxDataPoint As DataPoint = mySeries.Points().FindMaxValue()
' Find the first data point with the minimum Y value.
Dim minDataPoint As DataPoint = mySeries.Points().FindMinValue()
' Find the first data point with a first Y value of 10.
Dim dataPoint As DataPoint = mySeries.Points().FindValue(10.0)
|
C# |
Copy Code |
using Dundas.Charting.WinControl;
...
// Find the first data point with the maximum Y value.
DataPoint maxDataPoint = mySeries.Points().FindMaxValue();
// Find the first data point with the minimum Y value.
DataPoint minDataPoint = mySeries.Points().FindMinValue();
// Find the first data point with a first Y value of 10.
DataPoint dataPoint = mySeries.Points().FindValue(10);
|
Working with Point Finding Methods
By default, all of the point finding methods will examine the first Y value ("Y"). This behavior can be changed by providing the name of the value to look at as a parameter. Possible values are: "X", "Y" (first Y value, the default), "Y2", "Y3", etc.
Example
This example demonstrates how to find data points using non-default values.
Visual Basic |
Copy Code |
Imports Dundas.Charting.WinControl
...
' Find first data point with the maximum X value.
Dim maxDataPoint As DataPoint = mySeries.Points().FindMaxValue("X")
' Find the first data point with the minimum second Y value.
Dim minDataPoint As DataPoint = mySeries.Points().FindMinValue("Y2")
' Find first data point with an X value of "1/1/2001".
Dim dataPoint As DataPoint = mySeries.Points().FindValue(DateTime.Parse("1/1/2001").ToOADate(), "X")
|
C# |
Copy Code |
using Dundas.Charting.WinControl;
...
// Find first data point with the maximum X value.
DataPoint maxDataPoint = mySeries.Points().FindMaxValue("X");
// Find the first data point with the minimum second Y value.
DataPoint minDataPoint = mySeries.Points().FindMinValue("Y2");
// Find first data point with an X value of "1/1/2001".
DataPoint dataPoint = mySeries.Points().FindValue(DateTime.Parse("1/1/2001").ToOADate(), "X");
|
Multiple Points with the Same Value
It is possible that there are multiple points that match the search criteria. However, by default the FindXXX methods will only return the first point in the DataPointCollection that matches the criteria.
To find all points that match a search criteria provide the starting point index of the search using the StartFromIndex parameter. Call the method in a loop and increment the index with each successive method call. When the function returns it will have an index of the next located point, or -1 if nothing was found. Also, if a point does not match the search criteria a value of null will be returned.
Example
This example demonstrates how to find all data points with Y value equal to 10.
Visual Basic |
Copy Code |
Imports Dundas.Charting.WinControl
...
' Find all data points with a value 10.
Dim dataPoint As DataPoint = 0
Dim pointIndex As Integer
pointIndex = 0
Do While (Not (dataPoint) Is Nothing)
dataPoint = Chart1.Series("MySeries").Points.FindValue(10, "Y", pointIndex)
' Do something with points found.
If (Not (dataPoint) Is Nothing) Then
...
End If
pointIndex = (pointIndex + 1)
Loop
|
C# |
Copy Code |
using Dundas.Charting.WinControl;
...
// Find all data points with a value 10.
DataPoint dataPoint = Chart1.Series["MySeries"].Points.FindValue(10, "Y", ref pointIndex);
int pointIndex = 0;
while(dataPoint!=null)
{
dataPoint = Chart1.Series["MySeries"].Points.FindValue(10, "Y", ref pointIndex);
pointIndex++;
// Do something with points found.
if(dataPoint != null)
{
...
}
}
|
Example
This example demonstrates how to find all data points with a second Y value 10. Once found, we reset the color of these points.
Visual Basic |
Copy Code |
Imports Dundas.Charting.WinControl
...
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Find all points with a second Y value equal to 10, and change their color.
Dim index As Integer = 0
'Find first point with a Y2 value of 10.
Dim dataPoint As DataPoint = Chart1.Series("Series1").Points.FindValue(10, "Y2", index)
While Not (dataPoint Is Nothing)
dataPoint.Color = Color.FromArgb(255, 128, 128)
'Find all other data points with a second Y value 10.
index += 1
dataPoint = Chart1.Series("Series1").Points.FindValue(10, "Y2", index)
End While
End Sub
|
C# |
Copy Code |
using Dundas.Charting.WinControl;
...
private void Form1_Load(object sender, System.EventArgs e)
{
// Find all points with a second Y value equal to 10, and change their color.
int index = 0;
// Find first point with a Y2 value of 10.
DataPoint dataPoint = Chart1.Series("Series1").Points.FindValue(10, "Y2", index);
while(!(dataPoint == null))
{
dataPoint.Color = Color.FromArgb(255, 128, 128);
// Find all other data points with a second Y value 10.
index++;
dataPoint = Chart1.Series("Series1").Points.FindValue(10, "Y2", index);
}
}
|
See Also