Error: Unhandled Error in Silverlight Application
Code: 4004
Category: ManagedRuntimeError
Message: System.NullReferenceException: Object reference not set to an instance of an object.
at Telerik.Windows.Controls.Charting.ChartArea.ClearLogicalChildren()
at Telerik.Windows.Controls.Charting.ChartArea.PopulateLogicalChildren()
at Telerik.Windows.Controls.Charting.ChartArea.OnApplyTemplate()
at System.Windows.FrameworkElement.OnApplyTemplate(IntPtr nativeTarget)
I'm using the lastest SP of Telerik version 3 (not able to update to version 4 without VS2010). The examples I've seen use SeriesMapping for 3D but I want to use DataSeries like I do with 2D...is this possible? Here's my code:
chartReport.DefaultView.ChartArea.DataSeries.Clear();
chartReport.DefaultView.ChartArea.ItemClick += RadChart1ChartItemClicked;
if (chartReport.DefaultView.ChartArea.AdditionalYAxes.Count > 0)
{
chartReport.DefaultView.ChartArea.AdditionalYAxes[0].AxisName = _rs.ChartSecondaryYAxis;
}
else
{
AxisY series2Axis = new AxisY();
series2Axis.AxisName = _rs.ChartSecondaryYAxis;
chartReport.DefaultView.ChartArea.AdditionalYAxes.Add(series2Axis);
}
chartReport.DefaultView.ChartTitle.Visibility = Visibility.Collapsed;
chartReport.DefaultView.ChartArea.AxisX.LabelRotationAngle = 30;
chartReport.DefaultView.ChartArea.ZoomScrollSettingsX.ScrollMode = ScrollMode.None;
chartReport.DefaultView.ChartArea.ZoomScrollSettingsY.ScrollMode = ScrollMode.None;
chartReport.DefaultView.ChartArea.AxisY.AutoRange = true;
DataSeries dataSeries1 = new DataSeries();
if (_rs.ChartDimension.ToLower() == "3d")
chartReport.DefaultView.ChartArea.Extensions.Add(new CameraExtension());
if (_rs.ChartType.ToLower() == "line")
{
if (_rs.ChartDimension.ToLower() == "2d")
dataSeries1.Definition = new LineSeriesDefinition();
else
dataSeries1.Definition = new Line3DSeriesDefinition();
}
else
{
if (_rs.ChartDimension.ToLower() == "2d")
dataSeries1.Definition = new BarSeriesDefinition();
else
dataSeries1.Definition = new Bar3DSeriesDefinition();
}
dataSeries1.LegendLabel = _rs.ChartPrimaryYAxis;
dataSeries1.Definition.LegendDisplayMode = LegendDisplayMode.SeriesLabel;
DataSeries dataSeries2 = null;
if (_rs.UseChartSecondaryYAxis)
{
dataSeries2 = new DataSeries();
if (_rs.ChartType.ToLower() == "line")
{
if (_rs.ChartDimension.ToLower() == "2d")
dataSeries2.Definition = new LineSeriesDefinition();
else
dataSeries2.Definition = new Line3DSeriesDefinition();
}
else
{
if (_rs.ChartDimension.ToLower() == "2d")
dataSeries2.Definition = new BarSeriesDefinition();
else
dataSeries2.Definition = new Bar3DSeriesDefinition();
}
dataSeries2.Definition.AxisName = _rs.ChartSecondaryYAxis;
dataSeries2.LegendLabel = _rs.ChartSecondaryYAxis;
dataSeries2.Definition.LegendDisplayMode = LegendDisplayMode.SeriesLabel;
}
int rowNum = 0;
foreach (object item in source)
{
if (rowNum == topRows)
break;
string[] attributes = _rs.ChartXAxis.Split(',');
string attributeName = "";
foreach (string attribute in attributes)
{
object name = item.GetType().GetProperty(DynamicDataBuilder.ReplaceProblematicChars(attribute)).GetValue(item, null);
if (attributeName.Length > 0)
attributeName += " | ";
attributeName += Convert.ToString(name);
}
object value = item.GetType().GetProperty(_rs.ChartPrimaryYAxis).GetValue(item, null);
dataSeries1.Add(new DataPoint(attributeName, Convert.ToDouble(value)) { DataItem = item });
if (_rs.UseChartSecondaryYAxis)
{
value = item.GetType().GetProperty(_rs.ChartSecondaryYAxis).GetValue(item, null);
dataSeries2.Add(new DataPoint(attributeName, Convert.ToDouble(value)) { DataItem = item });
}
rowNum++;
}
chartReport.DefaultView.ChartArea.DataSeries.Add(dataSeries1);
if (dataSeries2 != null)
chartReport.DefaultView.ChartArea.DataSeries.Add(dataSeries2);
chartReport.Width = rowNum * 80 + 300;
chartReport.DefaultView.ChartArea.AxisX.AxisStyles.ItemLabelStyle = LayoutRoot.Resources["AxisXStyleTextBlock"] as Style;
This works perfectly for 2D, but it looks like I can't simply use the 3D series definition class in place of the regular series definition class. The example shown here adds the CameraExtension (which I've also coded...getting the same error) but this is the only major difference I can see (maybe something is being left out here):
http://demos.telerik.com/silverlight/#Chart/Gallery3D/Line
Is there a better (working) example that I can use that implements either the Line3DSeriesDefinition or the Bar3DSeriesDefinition classes with the DataSeries?