This question is locked. New answers and comments are not allowed.
My X-Axis labels are not sorting correctly as specified by my sort order field. The bars are supposed to be ordered by Month, then by Year. For some reason July, August, September of 2008 are being kicked out of order. However, then you un-comment the last piece of data, it seems to sort correctly. Also, when sorting in Decending order (with the last data commented) it displays correctly as well. Any Ideas?
using System.Linq; |
using System.Net; |
using System.Windows; |
using System.Windows.Controls; |
using System.Windows.Documents; |
using System.Windows.Input; |
using System.Windows.Media; |
using System.Windows.Media.Animation; |
using System.Windows.Shapes; |
using Telerik.Windows.Controls.Charting; |
namespace SilverlightApplicationStackedChartTest1 |
{ |
public partial class Stacked_Chart : UserControl |
{ |
public Stacked_Chart() |
{ |
InitializeComponent(); |
LoadChart(); |
} |
void Chart_StackedChartSetProperties() |
{ |
SeriesMapping smStacked = new SeriesMapping(); |
ChartSortDescriptor sort = new ChartSortDescriptor(); |
sort.Member = "SortField"; |
sort.SortDirection = System.ComponentModel.ListSortDirection.Ascending; |
smStacked.SeriesDefinition = new StackedBarSeriesDefinition(); |
smStacked.GroupingSettings.GroupDescriptors.Add(new ChartGroupDescriptor("Group1")); |
smStacked.ItemMappings.Add(new ItemMapping("BarY", DataPointMember.YValue)); |
smStacked.ItemMappings.Add(new ItemMapping("DataX", DataPointMember.XCategory)); |
smStacked.SeriesDefinition.ShowItemLabels = false; |
smStacked.SeriesDefinition.ItemStyle = this.Resources["MyBarStyle"] as Style; |
StackedChart.ItemsSource = null; |
StackedChart.SeriesMappings.Clear(); |
StackedChart.DefaultView.ChartArea.DataSeries.Clear(); |
StackedChart.SeriesMappings.Add(smStacked); |
StackedChart.SortDescriptors.Add(sort); |
StackedChart.PaletteBrushes.AddRange(ChartHelper.Palette); |
StackedChart.DefaultView.ChartArea.AxisX.LayoutMode = AxisLayoutMode.Between; |
StackedChart.DefaultView.ChartArea.AxisX.LabelRotationAngle = 270 + 23; |
StackedChart.DefaultView.ChartLegendPosition = Telerik.Windows.Controls.Dock.Left; |
} |
public void LoadChart() |
{ |
Chart_StackedChartSetProperties(); |
StackedChart.ItemsSource = getData(); |
StackedGrid.ItemsSource = getData(); |
} |
private List<ChartItem> getData() |
{ |
List<ChartItem> trend = new List<ChartItem>(); |
trend.Add(new ChartItem() { BarY = 273, DataX = "Jun-2009", SortField = 1012009, Group1 = "Sewer Water" }); |
trend.Add(new ChartItem() { BarY = 363, DataX = "Jun-2009", SortField = 1012009, Group1 = "Solid Waste" }); |
trend.Add(new ChartItem() { BarY = 217, DataX = "Jul-2008", SortField = 1022008, Group1 = "Solid Waste" }); |
trend.Add(new ChartItem() { BarY = 096, DataX = "Jul-2009", SortField = 1022009, Group1 = "Sewer Water" }); |
trend.Add(new ChartItem() { BarY = 363, DataX = "Jul-2009", SortField = 1022009, Group1 = "Solid Waste" }); |
trend.Add(new ChartItem() { BarY = 235, DataX = "Aug-2008", SortField = 1032008, Group1 = "Solid Waste" }); |
trend.Add(new ChartItem() { BarY = 099, DataX = "Aug-2009", SortField = 1032009, Group1 = "Sewer Water" }); |
trend.Add(new ChartItem() { BarY = 306, DataX = "Aug-2009", SortField = 1032009, Group1 = "Solid Waste" }); |
trend.Add(new ChartItem() { BarY = 331, DataX = "Sep-2008", SortField = 1042008, Group1 = "Solid Waste" }); |
trend.Add(new ChartItem() { BarY = 087, DataX = "Sep-2009", SortField = 1042009, Group1 = "Sewer Water" }); |
trend.Add(new ChartItem() { BarY = 000, DataX = "Sep-2009", SortField = 1042009, Group1 = "Solid Waste" }); |
trend.Add(new ChartItem() { BarY = 293, DataX = "Oct-2008", SortField = 1052008, Group1 = "Sewer Water" }); |
trend.Add(new ChartItem() { BarY = 296, DataX = "Oct-2008", SortField = 1052008, Group1 = "Solid Waste" }); |
trend.Add(new ChartItem() { BarY = 099, DataX = "Oct-2009", SortField = 1052009, Group1 = "Sewer Water" }); |
trend.Add(new ChartItem() { BarY = 000, DataX = "Oct-2009", SortField = 1052009, Group1 = "Solid Waste" }); |
trend.Add(new ChartItem() { BarY = 358, DataX = "Nov-2008", SortField = 1062008, Group1 = "Solid Waste" }); |
trend.Add(new ChartItem() { BarY = 323, DataX = "Nov-2008", SortField = 1062008, Group1 = "Sewer Water" }); |
trend.Add(new ChartItem() { BarY = 093, DataX = "Nov-2009", SortField = 1062009, Group1 = "Sewer Water" }); |
trend.Add(new ChartItem() { BarY = 000, DataX = "Nov-2009", SortField = 1062009, Group1 = "Solid Waste" }); |
trend.Add(new ChartItem() { BarY = 256, DataX = "Dec-2008", SortField = 1072008, Group1 = "Sewer Water" }); |
trend.Add(new ChartItem() { BarY = 332, DataX = "Dec-2008", SortField = 1072008, Group1 = "Solid Waste" }); |
trend.Add(new ChartItem() { BarY = 093, DataX = "Dec-2009", SortField = 1072009, Group1 = "Sewer Water" }); |
trend.Add(new ChartItem() { BarY = 000, DataX = "Dec-2009", SortField = 1072009, Group1 = "Solid Waste" }); |
trend.Add(new ChartItem() { BarY = 084, DataX = "Jan-2010", SortField = 1082010, Group1 = "Sewer Water" }); |
trend.Add(new ChartItem() { BarY = 000, DataX = "Jan-2010", SortField = 1082010, Group1 = "Solid Waste" }); |
trend.Add(new ChartItem() { BarY = 103, DataX = "Feb-2010", SortField = 1092010, Group1 = "Sewer Water" }); |
trend.Add(new ChartItem() { BarY = 000, DataX = "Feb-2010", SortField = 1092010, Group1 = "Solid Waste" }); |
trend.Add(new ChartItem() { BarY = 000, DataX = "Mar-2010", SortField = 1102010, Group1 = "Solid Waste" }); |
trend.Add(new ChartItem() { BarY = 000, DataX = "Apr-2010", SortField = 1112010, Group1 = "Solid Waste" }); |
trend.Add(new ChartItem() { BarY = 000, DataX = "May-2010", SortField = 1122010, Group1 = "Solid Waste" }); |
//Uncomment the line below and the chart sorts correctly |
//trend.Add(new ChartItem() { BarY = 000, DataX = " ", SortField = 0, Group1 = "Solid Waste" }); |
return trend; |
} |
} |
public class ChartItem |
{ |
public decimal BarY { set; get; } |
public string DataX { set; get; } |
public int SortField { set; get; } |
public string Group1 { set; get; } |
} |
public class ChartHelper |
{ |
public static IEnumerable<System.Windows.Media.Brush> Palette |
{ |
get |
{ |
List<System.Windows.Media.Brush> scb = new List<System.Windows.Media.Brush>(); |
scb.Add(new SolidColorBrush(Color.FromArgb(255, 108, 117, 128))); |
scb.Add(new SolidColorBrush(Color.FromArgb(255, 139, 155, 173))); |
scb.Add(new SolidColorBrush(Color.FromArgb(255, 175, 188, 199))); |
scb.Add(new SolidColorBrush(Color.FromArgb(255, 64, 88, 104))); |
scb.Add(new SolidColorBrush(Color.FromArgb(255, 102, 102, 102))); |
return scb; |
} |
} |
} |
} |