I have a bar chart and I'm trying to get the name of the series when I click on the Label Element next to the bar.
However, I can't find any documentation on how to add a click event to the label element (in the image attached, I'm talking about the $10000 label).
I have a SelectedPointChanged event registered to my RadChartView control and that works great, but only works when the bar is clicked not the label next to it.
private
void
selectionController_SelectedPointChanged(
object
sender, ChartViewSelectedPointChangedEventArgs args)
{
var series = args.NewSelectedSeries;
}
4 Answers, 1 is accepted
0
Kyle
Top achievements
Rank 1
answered on 08 Dec 2017, 05:17 PM
Also, in my example image above I would expect the series name to be "Test".
0
Accepted
Hello Kyle,
Thank you for writing.
RadChartView does not provide means for directly attaching a click event to the label elements. You can achieve your task by handling the MouseClick event of the control and after checking for the mouse and the labels locations:
I am also attaching a short video showing the result on my end.
I hope this helps. Let me know if you need further assistance.
Regards,
Hristo
Progress Telerik
Thank you for writing.
RadChartView does not provide means for directly attaching a click event to the label elements. You can achieve your task by handling the MouseClick event of the control and after checking for the mouse and the labels locations:
public
partial
class
RadForm1 : Telerik.WinControls.UI.RadForm
{
public
RadForm1()
{
InitializeComponent();
BarSeries barSeries =
new
BarSeries(
"Performance"
,
"RepresentativeName"
);
barSeries.Name =
"Series1"
;
barSeries.LegendTitle =
"Series1"
;
barSeries.ShowLabels =
true
;
barSeries.DataPoints.Add(
new
CategoricalDataPoint(177,
"Harley"
));
this
.radChartView1.Series.Add(barSeries);
BarSeries barSeries2 =
new
BarSeries(
"Performance"
,
"RepresentativeName"
);
barSeries2.Name =
"Series2"
;
barSeries2.LegendTitle =
"Series2"
;
barSeries2.ShowLabels =
true
;
barSeries2.DataPoints.Add(
new
CategoricalDataPoint(141,
"White"
));
this
.radChartView1.Series.Add(barSeries2);
this
.radChartView1.ShowLegend =
true
;
this
.radChartView1.MouseClick += RadChartView1_MouseClick;
}
private
void
RadChartView1_MouseClick(
object
sender, MouseEventArgs e)
{
foreach
(ChartSeries series
in
this
.radChartView1.Series)
{
foreach
(BarPointElement pointElement
in
series.Children)
{
BarLabelElement labelElement = pointElement.Children[0]
as
BarLabelElement;
Rectangle rect = CartesianRenderer.ToRectangle(labelElement.GetLayoutSlot());
rect.Offset(
this
.radChartView1.ChartElement.View.Margin.Left,
this
.radChartView1.ChartElement.View.Margin.Top);
if
(rect.Contains(
this
.radChartView1.ChartElement.Wrapper.PointFromControl(e.Location)))
{
RadMessageBox.Show(series.Name);
}
}
}
}
}
I am also attaching a short video showing the result on my end.
I hope this helps. Let me know if you need further assistance.
Regards,
Hristo
Progress Telerik
Try our brand new, jQuery-free Angular components built from ground-up which deliver the business app essential building blocks - a grid component, data visualization (charts) and form elements.
0
Kyle
Top achievements
Rank 1
answered on 11 Dec 2017, 02:05 PM
Perfect, thank you!
0
James
Top achievements
Rank 1
Veteran
answered on 29 Feb 2020, 04:55 PM
For Pie Charts:
foreach
(Telerik.WinControls.UI.PieSeries objChartSeries
in
this
.chartPieChart.Series)
{
foreach
(Telerik.WinControls.UI.PiePointElement objPiePointElement
in
objChartSeries.Children)
{
if
(objPiePointElement.Children[0]
is
Telerik.WinControls.UI.PieLabelElement)
{
Telerik.WinControls.UI.PieLabelElement objLabelElement = objPiePointElement.Children[0]
as
Telerik.WinControls.UI.PieLabelElement;
if
(objLabelElement.Parent
is
Telerik.WinControls.UI.PiePointElement)
{
Telerik.WinControls.UI.PiePointElement objPointElement = (Telerik.WinControls.UI.PiePointElement)objLabelElement.Parent;
if
(objLabelElement.SmartRectangle.Contains(e.X, e.Y))
{
Debug.WriteLine(String.Format(
"User clicked: {0} Label Text: "
, objPiePointElement.LegendTitle, objLabelElement.Text));
}
}
}
}
}