alexvw Ответов: 1

Asp.net + chart.customizelegend не оказывает влияния


Всем привет,

Меня попросили собрать несколько графиков для офиса, и у "клиента" возникла проблема с прямоугольниками, используемыми в легенде диаграммы.

Проведя некоторое "исследование", я наткнулся на этот документ MS:
Диаграмма.Событие CustomizeLegend (System.Web.UI.DataVisualization.Картирование)[^]

Который якобы говорит нам, как это сделать. "настройка условных обозначений элементов".

Несмотря на все мои попытки, я никак не могу повлиять на упомянутые пункты.

Что я уже пробовал:

Разметка:
<asp:Chart ID="PieChart" runat="server" Width="365px" OnCustomizeLegend="PieChart_CustomizeLegend">...

с фоновым кодом:
protected void PieChart_CustomizeLegend(object sender, CustomizeLegendEventArgs e)
{
    foreach (LegendItem lgItem in e.LegendItems)
    {
        lgItem.MarkerStyle = MarkerStyle.Diamond;
    }
}


Вы случайно не знаете, чего мне не хватает?

Спасибо за Ваш вклад.

1 Ответов

Рейтинг:
5

alexvw

Привет,

Пожалуйста, простите меня за то, что я не дал вам больше времени, чтобы придумать некоторые идеи; здесь после я объясню, что я сделал, чтобы получить то, что мне нужно, и оставлю все вопросы, о которых я ничего не смог найти.

В общем, настройка элементов легенды была не такой прямой, как я ожидал. Мне пришлось предпринять следующие шаги:

1) Легенда диаграммы должна быть установлена в значение : LegendItemOrder="SameAsSeriesOrder", иначе результат будет полностью неорганизованным.

2) Изменил событие CustomizeLegend следующим образом:

protected void PieChart_CustomizeLegend(object sender, CustomizeLegendEventArgs e)
        {
            foreach (LegendItem lgItem in e.LegendItems)
            {
                if (!string.IsNullOrEmpty(lgItem.Name))
                {
                    LegendItem cstItem = new LegendItem();
                    cstItem.ImageStyle = LegendImageStyle.Marker;
                    cstItem.MarkerColor = lgItem.Color;
                    cstItem.Name = lgItem.Name;
                    cstItem.MarkerStyle = MarkerStyle.Diamond;
                    cstItem.MarkerSize = 15;
                    ((Chart)sender).Legends[0].CustomItems.Add(cstItem);
                }
            }
           
            ((Chart)sender).Series[0].IsVisibleInLegend = false;

            ((Chart)sender).CustomizeLegend -= PieChart_CustomizeLegend;
        }

Обратите внимание, что набор серий IsVisibleInLegend свойство внутри события, а не в разметке. Если это будет сделано там, в легенде ничего не будет нарисовано.

Более того, я заметил, что, как-то не могу объяснить, CustomizeLegend мероприятие начнется выстрелил три раза, дающий нежелательные результаты, таким образом, un-подписка.