Jump to content
Software FX Community

index out of bounds exception after data bound


ron.kagan

Recommended Posts

Hello. I'm getting very frustrated with this control. I am working with a datatable that is crosstab transformed to a bar chart.

in the databound event i am changing the x axis min and max, which caused the index was outside teh bounds of the array and this stacktrace :

at ChartFX.WPF.SeriesDataArray.c(Int32 A_0)

at ChartFX.WPF.DataArray.get_Item(Int32 series, Int32 point)

at ChartFX.WPF.DataArray.ChartFX.WPF.Internal.IDataSimpleArray.get_Item(Int32 point)

at ChartFX.WPF.GenericStepper.a(Double A_0, Double A_1)

at ChartFX.WPF.NumericStepper.a(Double A_0, Double A_1, Double A_2, Double A_3, Boolean& A_4)

at ChartFX.WPF.Axis.b(AxisPaint A_0, SectionAttributes& A_1, AxisPaintInfo& A_2, Double A_3, Double A_4, AxisPaintFlags A_5, Double A_6, Double A_7)

at ChartFX.WPF.Axis.a(AxisPaint A_0, SectionAttributes& A_1, AxisPaintInfo& A_2, Double A_3, Double A_4, AxisPaintFlags A_5, Double A_6, Double A_7)

at ChartFX.WPF.Axis.a(Size A_0, AxisPaintFlags A_1, FrameworkElement A_2, IPlotArea A_3, IAxisPainter A_4)

at ChartFX.WPF.Axis.AxisPainter.OnRender(DrawingContext drawingContext)

at System.Windows.UIElement.Arrange(Rect finalRect)

at ChartFX.WPF.Controls.AxisPanel.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at ChartFX.WPF.Controls.SpacingDockPanel.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)

at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)

at ActiproSoftware.Windows.Controls.Docking.DockingWindowContainer.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)

at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)

at ActiproSoftware.Windows.Controls.Docking.HierarchyRootContainer.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)

at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)

at ActiproSoftware.Windows.Controls.Docking.Workspace.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at ActiproSoftware.Windows.Controls.Docking.SplitContainer.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)

at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Decorator.ArrangeOverride(Size arrangeSize)

at System.Windows.Documents.AdornerDecorator.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)

at ActiproSoftware.Windows.Controls.Docking.HierarchyRootContainer.ArrangeOverride(Size finalSize)

at ActiproSoftware.Windows.Controls.Docking.DockHost.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)

at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)

at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Decorator.ArrangeOverride(Size arrangeSize)

at System.Windows.Documents.AdornerDecorator.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Control.ArrangeOverride(Size arrangeBounds)

at ActiproSoftware.Windows.Controls.Docking.DockSite.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.DockPanel.ArrangeOverride(Size arrangeSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at MS.Internal.Helper.ArrangeElementWithSingleChild(UIElement element, Size arrangeSize)

at System.Windows.Controls.ContentPresenter.ArrangeOverride(Size arrangeSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Grid.ArrangeOverride(Size arrangeSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Border.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Controls.Decorator.ArrangeOverride(Size arrangeSize)

at System.Windows.Documents.AdornerDecorator.ArrangeOverride(Size finalSize)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.Window.ArrangeOverride(Size arrangeBounds)

at ActiproSoftware.Windows.Controls.Ribbon.RibbonWindow.ArrangeOverride(Size arrangeBounds)

at System.Windows.FrameworkElement.ArrangeCore(Rect finalRect)

at System.Windows.UIElement.Arrange(Rect finalRect)

at System.Windows.ContextLayoutManager.UpdateLayout()

at System.Windows.UIElement.UpdateLayout()

at System.Windows.Interop.HwndSource.SetLayoutSize()

at System.Windows.Interop.HwndSource.set_RootVisualInternal(Visual value)

at System.Windows.Interop.HwndSource.set_RootVisual(Visual value)

at System.Windows.Window.SetRootVisual()

at System.Windows.Window.SetupInitialState(Double requestedTop, Double requestedLeft, Double requestedWidth, Double requestedHeight)

at System.Windows.Window.CreateSourceWindowImpl()

at System.Windows.Window.SafeCreateWindow()

at System.Windows.Window.ShowHelper(Object booleanBox)

at System.Windows.Window.Show()

at System.Windows.Window.ShowDialog()

at LogbiGUI.Boxes.ShowEBox(Exception e, String header, String additionalData, String relatedFile)

at LogbiGUI.Boxes.ShowEBox(Exception e, String header, String additionalData, String relatedFile, String dllName)

at LogbiUtils.Boxes.ShowEBox(Exception e, String header, String additionalData, String relatedFile) in E:\Visual Studio 2008 Projects\Logbi\LogbiUtils\Boxes.cs:line 101

at LogbiUtils.Boxes.ShowEBox(Exception e) in E:\Visual Studio 2008 Projects\Logbi\LogbiUtils\Boxes.cs:line 69

at Logbi.App.Current_DispatcherUnhandledException(Object sender, DispatcherUnhandledExceptionEventArgs e) in E:\Visual Studio 2008 Projects\Logbi\Logbi\App.xaml.cs:line 255

at System.Windows.Threading.Dispatcher.CatchException(Exception e)

at System.Windows.Threading.Dispatcher.CatchExceptionStatic(Object source, Exception e)

at System.Windows.Threading.ExceptionWrapper.CatchException(Object source, Exception e, Delegate catchHandler)

at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)

at System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)

at System.Windows.Threading.DispatcherOperation.InvokeImpl()

at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)

at System.Threading.ExecutionContext.runTryCode(Object userData)

at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)

at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)

at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

at System.Windows.Threading.DispatcherOperation.Invoke()

at System.Windows.Threading.Dispatcher.ProcessQueue()

at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)

at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)

at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)

at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Boolean isSingleParameter)

at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler)

I cannot figure out what i am doing wrong as this sounds something you should be able to do.

Link to comment
Share on other sites

Sure thing.

My data table consists of two columns - XValue (double) and YValue (int)

here is the code I use

chart1.Gallery = Gallery.Bar;

chart1.ItemsSource = histogramTable.DefaultView;

CrosstabTransform ctt = new CrosstabTransform();

ctt.RowPath = "XValue";

ctt.ValuePath = "YValue";

ctt.XValuePath = "XValue";

chart1.DataTransforms.Clear();

chart1.DataTransforms.Add(ctt);

in the databound event , if this two lines exist, I get the mentioned exception :

chart.AxisX.Min = new DataUnit(_minXValue);

chart.AxisX.Max = new DataUnit(_maxXValue);

If i skip these two lines , the chart appears but with no visible data as the axis is not correct.

if i "refresh" - where i reassign the itemsource to the chart and the lines that sets the axixX min/max are called again, the chart appears as it should

post-7389-13922416300529_thumb.png

Link to comment
Share on other sites

I don't think you need a crosstab transform in this case, crosstab is not easy to explain in a few lines but I'll try.

ChartFX normally uses columns in your dataset as series to be plotted (e.g. lines in a line chart) and records in your dataset as "points" in the X axis,e.g.

Month - Nokia - RIM - Apple

Jan - 14 - 12 - 9

Feb - 15 - 11 - 10 

So you would create as many series as manufacturers and set their BindingPath properties appropriately, but sometimes your data looks like this

Manufacturer - Month - Sales

Nokia - Jan - 14

RIM - Jan - 12

Apple - Jan - 9

Nokia - Feb - 15

RIM - Feb - 11

Apple - Feb - 10

In this case you would probably want one series per manufacturer and one X point per month so you would use crosstab setting the RowPath as Month and ColumnPath as Manufacturer. Also note that bar charts normally do not support X values as it is not defined how wide should the bars be drawn. Normally XY data should be plotted using Scatter, Line or Area galleries.

If you just want a scatter chart using this data you can create a SeriesAttributes, set its BindingPath and BindingPathX to the names of your Y and X fields and add this SeriesAttributes to the chart's series collection.

The exception you are receiving is probably independent of this, if you know the min and max you want in a particular axis you don't have to wait for the bound event to set them.

JuanC

post-4991-13922416302623_thumb.png

Link to comment
Share on other sites

Thanx. I now understand that crosstab was indeed overkill.

the problem is there are still issues regarding the axis x as before:

I use (as suggested) this code :

SeriesAttributes se = new SeriesAttributes();

se.ItemsSource = histogramTable.DefaultView;

se.BindingPath = "YValue";

se.BindingPathX = "XValue";

chart1.Series.Clear();

chart1.Series.Add(se);

setting the min/max of the axisx still throw the same exception as before.

Link to comment
Share on other sites

We were able to duplicate the exception and it is in fact related to bar using XY data. Future builds will fix this exception by ignoring the X axis values for the bars. To get a chart similar to what you described you need the following code.

chart1.Gallery = Gallery.Bar;

ChartFX.WPF.Galleries.Bar barAttr = (ChartFX.WPF.Galleries.Bar) chart1.AllSeries.GalleryAttributes;

barAttr.XValues = true;

barAttr.XWidth = 0.2;

Note that the XWidth property is set in the same units as your X axis, also note that overlapping is possible depending on your data.

JuanC

Link to comment
Share on other sites

thanx. I already figured the XValues = true and XWidth but what solved this was assigning the XValues = true before giving the series attributes the items source.

I have another open question regarding mouse selection and zooming that was not answered for couple of days so if someone can have a look that will be nice.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...