StackedBar Chart binding data but not displaying data

5 posts, 1 answers
  1. Sam
    Sam avatar
    23 posts
    Member since:
    Oct 2011

    Posted 29 Dec 2011 Link to this post

    Hi everyone,

    I'm having some issues with displaying a StackedBar chart. I can confirm that data is being bound (because the DataBound event is firing). However, the data is not being displayed (see attached). I'm simply getting a "No Data Series". I modeled this chart after another regular bar series chart that works fine.
     

    using System;
    using System.Linq;
    using System.Windows;
    using System.Windows.Controls;
    using Telerik.Windows.Controls.Charting;
    using RadHelpdeskDashboard.HelpdeskServiceReference;
    using RadHelpdeskDashboard.Helpers;
    using System.Collections.ObjectModel;
    using System.Collections.Generic;
    using System.Windows.Media;
     
    namespace RadHelpdeskDashboard
    {
        public partial class MainPage : UserControl
        {
            public MainPage()
            {
                InitializeComponent();
                TotalElapsedOpenTicketsChart.Loaded +=new RoutedEventHandler(TotalElapsedOpenTicketsChart_Loaded);
                Loaded +=new RoutedEventHandler(MainPage_Loaded);
            }
     
            public void MainPage_Loaded(object sender, RoutedEventArgs e)
            {
                LoadTotalElapsedOpenTicketsChart();
            }
     
     
            protected void LoadTotalElapsedOpenTicketsChart()
            {
                TotalElapsedOpenTicketsChartBusy.IsBusy = true;
                HelpdeskDataServiceClient obj = new HelpdeskDataServiceClient();
                obj.GetTotalElapsedOpenTicketsCompleted += (sender, e) =>
                    {
                        List<PeopleTotalOpenElapsedTicket> _people = new List<PeopleTotalOpenElapsedTicket>();
                        foreach (TotalElapsedOpenTickets_GetResult tickresult in e.Result)
                        {
                            PeopleTotalOpenElapsedTicket temp = new PeopleTotalOpenElapsedTicket(tickresult.Name,
                                                                                                 (tickresult.Total.HasValue) ? tickresult.Total.Value : 0,
                                                                                                 tickresult.LT10, tickresult._10to30, tickresult.GT30);
                            _people.Add(temp);
                        }
     
                        TotalElapsedOpenTicketsChart.ItemsSource = _people;
                        TotalElapsedOpenTicketsChartBusy.IsBusy = false;
                    };
                obj.GetTotalElapsedOpenTicketsAsync();
            }
     
            public void TotalElapsedOpenTicketsChart_Loaded(object sender, RoutedEventArgs e)
            {
                StackedBar3DSeriesDefinition bar = new StackedBar3DSeriesDefinition("Name") { ShowItemLabels = true };
                bar.Appearance.Fill = new SolidColorBrush(Colors.Blue);
                SeriesMapping smLT10 = new SeriesMapping() { LegendLabel = "Less than 10 days", CollectionIndex = 0 };
                smLT10.ItemMappings.Add(new ItemMapping() { FieldName = "Name", DataPointMember = DataPointMember.XCategory });
                smLT10.ItemMappings.Add(new ItemMapping() { FieldName = "TicketsLessThanTenDays", DataPointMember = DataPointMember.YValue });
                smLT10.GroupingSettings.GroupDescriptors.Add(new ChartGroupDescriptor("Name"));
                smLT10.SeriesDefinition = bar;
     
                StackedBar3DSeriesDefinition bar1 = new StackedBar3DSeriesDefinition("Name") { ShowItemLabels = true };
                bar1.Appearance.Fill = new SolidColorBrush(Colors.Red);
                SeriesMapping sm10to30 = new SeriesMapping() { LegendLabel = "10 to 30 days", CollectionIndex = 1 };
                sm10to30.ItemMappings.Add(new ItemMapping() { FieldName = "Name", DataPointMember = DataPointMember.XCategory });
                sm10to30.ItemMappings.Add(new ItemMapping() { FieldName = "TicketsTenToThirtyDays", DataPointMember = DataPointMember.YValue });
                sm10to30.GroupingSettings.GroupDescriptors.Add(new ChartGroupDescriptor("Name"));
                sm10to30.SeriesDefinition = bar1;
     
                StackedBar3DSeriesDefinition bar2 = new StackedBar3DSeriesDefinition("Name") { ShowItemLabels = true };
                bar2.Appearance.Fill = new SolidColorBrush(Colors.Green);
                SeriesMapping smGT30 = new SeriesMapping() { LegendLabel = "Greater than 30 days", CollectionIndex = 2 };
                smGT30.ItemMappings.Add(new ItemMapping() { FieldName = "Name", DataPointMember = DataPointMember.XCategory });
                smGT30.ItemMappings.Add(new ItemMapping() { FieldName = "TicketsMoreThanThirtyDays", DataPointMember = DataPointMember.YValue });
                smGT30.GroupingSettings.GroupDescriptors.Add(new ChartGroupDescriptor("Name"));
                smGT30.SeriesDefinition = bar2;
     
                TotalElapsedOpenTicketsChart.SeriesMappings.Add(smLT10);
                TotalElapsedOpenTicketsChart.SeriesMappings.Add(sm10to30);
                TotalElapsedOpenTicketsChart.SeriesMappings.Add(smGT30);
     
                TotalElapsedOpenTicketsChart.DefaultView.ChartArea.AxisX.Title = "Employee";
                TotalElapsedOpenTicketsChart.DefaultView.ChartArea.AxisX.LabelRotationAngle = 45.0;
                TotalElapsedOpenTicketsChart.DefaultView.ChartArea.AxisX.LayoutMode = AxisLayoutMode.Inside;
                TotalElapsedOpenTicketsChart.DefaultView.ChartArea.AxisY.AutoRange = true;
                TotalElapsedOpenTicketsChart.DefaultView.ChartArea.AxisY.DefaultLabelFormat = "0";
                TotalElapsedOpenTicketsChart.DefaultView.ChartArea.AxisY.Title = "Tickets";
                TotalElapsedOpenTicketsChart.DefaultView.ChartLegend.UseAutoGeneratedItems = true;
                TotalElapsedOpenTicketsChart.DefaultView.ChartTitle.Content = "Total Elapsed Open Tickets";
                TotalElapsedOpenTicketsChart.DefaultView.ChartTitle.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
            }
        }
    }


    Any ideas? Thanks!

    -Sam
  2. Answer
    Rahul
    Rahul avatar
    116 posts
    Member since:
    Feb 2011

    Posted 30 Dec 2011 Link to this post

    Hi Sam,
    I analyzed one problem in your code.
    If i remove CollectionIndex from SeriesMapping then your chart is working fine.
    If i add CollectionIndex then its not working.

    I pasting your modified code. Hope it will help you.

    public partial class MainPage : UserControl
        {
            public MainPage()
            {
                InitializeComponent();
                radChart1.Loaded += new RoutedEventHandler(radChart1_Loaded);
                Loaded += new RoutedEventHandler(MainPage_Loaded);
                 
            }
     
            void radChart1_Loaded(object sender, RoutedEventArgs e)
            {
                StackedBar3DSeriesDefinition bar = new StackedBar3DSeriesDefinition("Name") { ShowItemLabels = true };
                bar.Appearance.Fill = new SolidColorBrush(Colors.Blue);
                SeriesMapping smLT10 = new SeriesMapping() { LegendLabel = "Less than 10 days" };
                smLT10.ItemMappings.Add(new ItemMapping() { FieldName = "FirstName", DataPointMember = DataPointMember.XCategory });
                smLT10.ItemMappings.Add(new ItemMapping() { FieldName = "LastName", DataPointMember = DataPointMember.YValue });
                smLT10.GroupingSettings.GroupDescriptors.Add(new ChartGroupDescriptor("FirstName"));
                smLT10.SeriesDefinition = bar;
      
                StackedBar3DSeriesDefinition bar1 = new StackedBar3DSeriesDefinition("Name") { ShowItemLabels = true };
                bar1.Appearance.Fill = new SolidColorBrush(Colors.Red);
                SeriesMapping sm10to30 = new SeriesMapping() { LegendLabel = "10 to 30 days"};
                sm10to30.ItemMappings.Add(new ItemMapping() { FieldName = "FirstName", DataPointMember = DataPointMember.XCategory });
                sm10to30.ItemMappings.Add(new ItemMapping() { FieldName = "LastName", DataPointMember = DataPointMember.YValue });
                sm10to30.GroupingSettings.GroupDescriptors.Add(new ChartGroupDescriptor("FirstName"));
                sm10to30.SeriesDefinition = bar1;
      
                StackedBar3DSeriesDefinition bar2 = new StackedBar3DSeriesDefinition("Name") { ShowItemLabels = true };
                bar2.Appearance.Fill = new SolidColorBrush(Colors.Green);
                SeriesMapping smGT30 = new SeriesMapping() { LegendLabel = "Greater than 30 days" };
                smGT30.ItemMappings.Add(new ItemMapping() { FieldName = "FirstName", DataPointMember = DataPointMember.XCategory });
                smGT30.ItemMappings.Add(new ItemMapping() { FieldName = "LastName", DataPointMember = DataPointMember.YValue });
                smGT30.GroupingSettings.GroupDescriptors.Add(new ChartGroupDescriptor("FirstName"));
                smGT30.SeriesDefinition = bar2;
      
                radChart1.SeriesMappings.Add(smLT10);
                radChart1.SeriesMappings.Add(sm10to30);
                radChart1.SeriesMappings.Add(smGT30);
      
                radChart1.DefaultView.ChartArea.AxisX.Title = "Employee";
                radChart1.DefaultView.ChartArea.AxisX.LabelRotationAngle = 45.0;
                radChart1.DefaultView.ChartArea.AxisX.LayoutMode = AxisLayoutMode.Inside;
                radChart1.DefaultView.ChartArea.AxisY.AutoRange = true;
                radChart1.DefaultView.ChartArea.AxisY.DefaultLabelFormat = "0";
                radChart1.DefaultView.ChartArea.AxisY.Title = "Tickets";
                radChart1.DefaultView.ChartLegend.UseAutoGeneratedItems = true;
                radChart1.DefaultView.ChartTitle.Content = "Total Elapsed Open Tickets";
                radChart1.DefaultView.ChartTitle.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
             
            }
     
            void MainPage_Loaded(object sender, RoutedEventArgs e)
            {
                LoadChartData();
            }
     
            private void LoadChartData()
            {
                List<PersonName> lst = new List<PersonName>();
                lst.Add(new PersonName { FirstName = "Rahul", LastName = 3 });
                lst.Add(new PersonName { FirstName = "Rahul", LastName = 3 });
                lst.Add(new PersonName { FirstName = "Rahul", LastName = 3 });
                lst.Add(new PersonName { FirstName = "Rahul", LastName = 3 });
                lst.Add(new PersonName { FirstName = "Rahul", LastName = 3 });
     
                radChart1.ItemsSource = lst;
            }
        }
        public class PersonName
        {
            private string firstName;
            private int lastName;
     
          
     
            public string FirstName
            {
                get { return firstName; }
                set { firstName = value; }
            }
     
            public int LastName
            {
                get { return lastName; }
                set { lastName = value; }
            }
        }
    }

    Regards
    Rahul
  3. DevCraft banner
  4. Sam
    Sam avatar
    23 posts
    Member since:
    Oct 2011

    Posted 03 Jan 2012 Link to this post

    Hi Rahul,

    Thanks very much, that seemed to work! I'm guessing that is a bug in the control because I believe that CollectionIndex should work.

    Interestingly now in the legend, there are way too many entries (see attached). The reason I used CollectionIndex was to order the 3 "groupings".


    Sam
  5. Evgenia
    Admin
    Evgenia avatar
    1407 posts

    Posted 06 Jan 2012 Link to this post

    Hi Sam,

    The source code provided by Rahul seems correct to me. Have you by any reason set the LegendDisplayMode property of the Chart to DataPointLabel. This will cause the Chart to display an item for each DataPoint in your series. If this is not the case I suggest that you take a look at the attached sample that demonstrates how to create a Grouped StackedBars.

    As for the CollectionIndex property - this property allows the chart to be data bound to a collection/array nested inside another collection/array. The index used is the index of the internal collection inside the ItemsSource. Since you don't have nested collections in your scenario - this won't help you in your scenario.

    All the best,
    Evgenia
    the Telerik team
    Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>
  6. Sam
    Sam avatar
    23 posts
    Member since:
    Oct 2011

    Posted 06 Jan 2012 Link to this post

    Hi Evgenia,

    Interestingly once I got rid of SeriesMapping.GroupSettings.Add(new ChartGroupDescriptor("Name"));

    it worked
Back to Top
DevCraft banner