@@ -183,9 +183,10 @@ internal void UpdateSBS()
183183 double totalWidth = GetTotalWidth ( ) / SideBySideSeriesPosition . Count ;
184184 double startPosition = 0 , end = 0 ;
185185
186- for ( int i = 0 ; i < SideBySideSeriesPosition . Count ; i ++ )
186+ var seriesGroups = SideBySideSeriesPosition . Values . ToList ( ) ;
187+ for ( int i = 0 ; i < seriesGroups . Count ; i ++ )
187188 {
188- var seriesGroup = SideBySideSeriesPosition . Values . ToList ( ) [ i ] ;
189+ var seriesGroup = seriesGroups [ i ] ;
189190 double sbsMaxWidth = GetSBSMaxWidth ( seriesGroup ) ;
190191
191192 foreach ( ChartSeries chartSeries in seriesGroup )
@@ -370,10 +371,11 @@ double GetTotalWidth()
370371
371372 if ( SideBySideSeriesPosition != null )
372373 {
373- for ( int i = 0 ; i < SideBySideSeriesPosition . Count ; i ++ )
374+ var valuesList = SideBySideSeriesPosition . Values . ToList ( ) ;
375+ for ( int i = 0 ; i < valuesList . Count ; i ++ )
374376 {
375377 double maxWidth = 0 ;
376- foreach ( ChartSeries sideBySideSeries in SideBySideSeriesPosition . Values . ToList ( ) [ i ] )
378+ foreach ( ChartSeries sideBySideSeries in valuesList [ i ] )
377379 {
378380 CartesianSeries cartesianSeries = ( CartesianSeries ) sideBySideSeries ;
379381 double width = cartesianSeries . GetActualWidth ( ) ;
@@ -483,73 +485,88 @@ static void CalculateStackingValues(Dictionary<string, List<StackingSeriesBase>>
483485 }
484486
485487 foreach ( var series in seriesList )
488+ {
489+ var xValues = series . GetXValues ( ) ;
490+ var yValues = series . YValues ;
491+ var bottomValues = new List < double > ( ) ;
492+ var topValues = new List < double > ( ) ;
493+ var seriesTypeName = series . GetType ( ) . Name ;
494+ bool is100Series = seriesTypeName . Contains ( "Stacking" , StringComparison . Ordinal ) && seriesTypeName . Contains ( "100Series" , StringComparison . Ordinal ) ;
495+
496+ if ( xValues != null )
486497 {
487- var xValues = series . GetXValues ( ) ;
488- var yValues = series . YValues ;
489- var bottomValues = new List < double > ( ) ;
490- var topValues = new List < double > ( ) ;
491-
492- if ( xValues != null )
498+ for ( int i = 0 ; i < xValues . Count ; i ++ )
493499 {
494- for ( int i = 0 ; i < xValues . Count ; i ++ )
495- {
496- var xValue = xValues [ i ] ;
497- var yValue = i < yValues . Count ? yValues [ i ] : 0 ;
498- yValue = double . IsNaN ( yValue ) ? 0 : yValue ;
500+ var xValue = xValues [ i ] ;
501+ var yValue = i < yValues . Count ? yValues [ i ] : 0 ;
502+ yValue = double . IsNaN ( yValue ) ? 0 : yValue ;
499503
500- if ( yValue >= 0 )
504+ if ( yValue >= 0 )
505+ {
506+ if ( positiveYValues . TryGetValue ( xValue , out double currentValue ) )
501507 {
502- if ( positiveYValues . TryGetValue ( xValue , out double currentValue ) )
503- {
504- bottomValues . Add ( ( axisCross > currentValue ) ? axisCross : currentValue ) ;
505- if ( series . GetType ( ) . Name . Contains ( "Stacking" , StringComparison . Ordinal ) && series . GetType ( ) . Name . Contains ( "100Series" , StringComparison . Ordinal ) )
506- {
507- yValue = GetYValue ( seriesList , yValue , i ) ;
508- }
509- positiveYValues [ xValue ] = currentValue + yValue ;
510- }
511- else
508+ bottomValues . Add ( ( axisCross > currentValue ) ? axisCross : currentValue ) ;
509+ if ( is100Series )
512510 {
513- bottomValues . Add ( axisCross ) ;
514- if ( series . GetType ( ) . Name . Contains ( "Stacking" , StringComparison . Ordinal ) && series . GetType ( ) . Name . Contains ( "100Series" , StringComparison . Ordinal ) )
515- {
516- yValue = GetYValue ( seriesList , yValue , i ) ;
517- }
518- positiveYValues . Add ( xValue , yValue ) ;
511+ yValue = GetYValue ( seriesList , yValue , i ) ;
519512 }
520-
521- topValues . Add ( positiveYValues [ xValue ] ) ;
513+ positiveYValues [ xValue ] = currentValue + yValue ;
522514 }
523515 else
524516 {
525- if ( ! negativeYValues . TryAdd ( xValue , yValue ) )
517+ bottomValues . Add ( axisCross ) ;
518+ if ( is100Series )
526519 {
527- bottomValues . Add ( ( axisCross < negativeYValues [ xValue ] ) ? axisCross : negativeYValues [ xValue ] ) ;
528- if ( series . GetType ( ) . Name . Contains ( "Stacking" , StringComparison . Ordinal ) && series . GetType ( ) . Name . Contains ( "100Series" , StringComparison . Ordinal ) )
529- {
530- yValue = GetYValue ( seriesList , yValue , i ) ;
531- }
532- negativeYValues [ xValue ] += yValue ;
520+ yValue = GetYValue ( seriesList , yValue , i ) ;
533521 }
534- else
522+ positiveYValues . Add ( xValue , yValue ) ;
523+ }
524+
525+ topValues . Add ( positiveYValues [ xValue ] ) ;
526+ }
527+ else
528+ {
529+ if ( ! negativeYValues . TryAdd ( xValue , yValue ) )
530+ {
531+ bottomValues . Add ( ( axisCross < negativeYValues [ xValue ] ) ? axisCross : negativeYValues [ xValue ] ) ;
532+ if ( is100Series )
535533 {
536- bottomValues . Add ( axisCross ) ;
534+ yValue = GetYValue ( seriesList , yValue , i ) ;
537535 }
538-
539- topValues . Add ( negativeYValues [ xValue ] ) ;
536+ negativeYValues [ xValue ] += yValue ;
537+ }
538+ else
539+ {
540+ bottomValues . Add ( axisCross ) ;
540541 }
541- }
542542
543- series . BottomValues = bottomValues ;
544- series . TopValues = topValues ;
543+ topValues . Add ( negativeYValues [ xValue ] ) ;
544+ }
545545 }
546+
547+ series . BottomValues = bottomValues ;
548+ series . TopValues = topValues ;
546549 }
547550 }
551+ }
548552 }
549553
550554 static double GetYValue ( List < StackingSeriesBase > SeriesList , double yValue , int index )
551555 {
552- double total = SeriesList . Where ( series => series != null && series . YValues . Count > index ) . Sum ( series => double . IsNaN ( series . YValues [ index ] ) ? 0 : Math . Abs ( series . YValues [ index ] ) ) ;
556+ double total = 0 ;
557+ for ( int i = 0 ; i < SeriesList . Count ; i ++ )
558+ {
559+ var series = SeriesList [ i ] ;
560+ if ( series != null && series . YValues . Count > index )
561+ {
562+ double val = series . YValues [ index ] ;
563+ if ( ! double . IsNaN ( val ) )
564+ {
565+ total += Math . Abs ( val ) ;
566+ }
567+ }
568+ }
569+
553570 if ( yValue != 0 )
554571 {
555572 yValue = ( yValue / total ) * 100 ;
0 commit comments