MS Chart Control: изменить порядок рядов в легенде - PullRequest
4 голосов
/ 17 декабря 2009

Как изменить порядок серий в легенде?

Моя серия строк появляется до моей серии StackedColumn, но после моей серии столбцов.

Chart c = new Chart();
ChartArea ca = c.ChartAreas.Add("main");
Legend lg = c.Legends.Add("mainLegend");
Series s1 = c.Series.Add("s1");
s1.ChartType = ChartType.StackedColumn;
Series s2 = c.Series.Add("s2");
s2.ChartType = ChartType.Column;
Series s3 = c.Series.Add("s3");
s3.ChartType = ChartType.Line;

Простите за плохое искусство ASCII, но легенда выглядит так:

....... [желтый] s2 ....... [красный] s3 ...... [синий] s1 ............

когда я бы хотел, чтобы все было в порядке: s1, s2, s3.

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 24 сентября 2010

Чтобы развернуть ответ Эмиля, информация MSDN для LegendItemOrder гласит:

Если для свойства LegendItemOrder установлено значение Авто, легенда будет автоматически обращена, если типы диаграмм StackedColumn, StackedColumn100, StackedArea или StackedArea100 имеют следующие значения:Используется.

Я не уверен, но я предполагаю, что он «группирует» s2 и s3 и отображает их в обратном порядке, потому что s1 является диаграммой StackedColumn - s1, (s2, s3) становится (s2, s3), s1.(Понятия не имею, что на самом деле происходит за кулисами)

Как сказал Эмиль, установка свойства LegendItemOrder на LegendItemOrder.SameAsSeriesOrder или LegendItemOrder.ReversedSeriesOrder должна заставить легенду отображаться в определенном порядке.

А вот ссылка на MSDN, которая содержит немного больше информации: http://msdn.microsoft.com/en-us/library/system.windows.forms.datavisualization.charting.legend.legenditemorder.aspx

2 голосов
/ 23 сентября 2010

Это кажется очень странным. Мне кажется, что порядок рядов в легенде должен совпадать с порядком их добавления или если вы установите свойство LegendItemOrder вашего экземпляра Legend на ReversedSeriesOrder в обратном порядке.

0 голосов
/ 17 февраля 2013
MSChart1.ShowLegend = True
With MSChart1
  .Column = 1
  .Row = 1
  .ColumnLabel = "Series 1"
  .Data = 100
  .Column = 2
  .Row = 1
  .ColumnLabel = "Series 2"
  .Data = 100
End With
...