создание динамических линейных рядов в линейной диаграмме

Это моя коллекция массивов

 [Bindable]private var Projects:ArrayCollection = new ArrayCollection( [
                { Department: "Software", TotalProjects: 73,Completed:30,Inprogress:30,Approved:13},
                { Department: "XML",TotalProjects: 50,Completed:20,Inprogress:20,Approved:10},
                { Department: "Publishing",TotalProjects: 25,Completed:5,Inprogress:10,Approved:10},
                { Department: "Indesign", TotalProjects: 70,Completed:30,Inprogress:30,Approved:10},
                { Department: "Imaging", TotalProjects: 42,Completed:30,Inprogress:10,Approved:2}]);

линейный ряд для линейного графика:

<mx:series>


<mx:LineSeries id="cs1"
                                   yField="TotalProjects"
                                   xField="Department"
                                   displayName="TotalProjects">

                </mx:LineSeries>
                <mx:LineSeries id="cs2"
                               yField="Inprogress"
                               xField="Department"
                               displayName="Inprogress">

                </mx:LineSeries>
                <mx:LineSeries id="cs3"
                               yField="Completed"
                               xField="Department"
                               displayName="Completed">

                </mx:LineSeries>
                <mx:LineSeries id="cs4"
                               yField="Approved"
                               xField="Department"
                               displayName="Approved">

                </mx:LineSeries>


            </mx:series>

как я могу создать mx:LineSeries динамически в зависимости от значений коллекции массива. Теперь есть только 4 серии строк, но иногда мне нужно показывать больше в соответствии с изменением значений коллекции массивов, например: если еще один статус HoldProject добавлен в коллекцию массивов?


person Santhosh Nayak    schedule 11.10.2011    source источник


Ответы (1)


var series:Array=[];
for (var prop:String in Projects[0])
    if (prop != "Department") {
        var ls:LineSeries=new LineSeries();
        ls.yField=prop;
        ls.xField="Department";
        s.displayName=prop;
        series.push(ls);
    }
myChart.series=series;

В этом случае каждый элемент в вашем dataProvider должен иметь одинаковый набор свойств.

person Timofei Davydik    schedule 11.10.2011
comment
ОК. Если я получаю объекты коллекции массивов с разными свойствами каждый раз, как перебирать элементы коллекции массивов и создавать серии строк? - person Santhosh Nayak; 11.10.2011
comment
Не могли бы вы подробнее рассказать? Потому что как мы можем узнать, какое поле должно использоваться в каждом элементе как yField? - person Timofei Davydik; 11.10.2011
comment
@ Тимофей Давыдик в коллекции массивов, заданной Department, является обычным явлением, но остальные поля меняются иногда только 3 статуса: Completed, _3 _, _ 4_ и несколько раз больше Completed, _6 _, _ 7 _, _ 8 _, _ 9 _, _ 10_ и т. Д. - person Santhosh Nayak; 11.10.2011
comment
@ Timofei Davydik это хорошо, но в prop вместо атрибута (Department) извлекается значение (программное обеспечение). как получить атрибут из проектов [0]? - person Santhosh Nayak; 11.10.2011
comment
@ M.S. Наяк, вы уверены, что скопировали код? В моем коде используется цикл for...var, он извлекает свойства / атрибуты. И for each...var цикл извлекает значения. Пожалуйста, убедитесь, что вы используете for...var. - person Timofei Davydik; 11.10.2011
comment
@ Тимофей Давыдик ок, для каждого использовал. Я отлично работаю, спасибо. - person Santhosh Nayak; 11.10.2011