Flex Datagrid: создание расписания - PullRequest
0 голосов
/ 01 марта 2010

У меня есть некоторые данные, переданные во флекс через веб-сервисы, и я хочу создать расписание. На данный момент у меня есть расписание, но день - это столбец, время - это столбец и т. Д., Путем сопоставления поля данных с этими столбцами.

Мне нужно перевернуть это и иметь все столбцы дня и один столбец времени, с каждым фильтром столбца дня к свойству дня, если вы понимаете, о чем я.

КАК мне пойти на это? Есть ли свойство поля данных для фильтрации таким образом, или есть лучший способ?

Ответы [ 3 ]

2 голосов
/ 04 марта 2010

Звучит так, будто вы хотите что-то похожее на календарь Outlook. Вам нужен столбец для каждого дня недели и строка для каждого часа дня.

DataGrids отображает элементы коллекции, связанные с их свойством dataProvider, в виде строк. Однако кажется, что ваша ArrayCollection содержит объекты-значения, которые соответствуют событию, которое происходит в определенное время, а не время, которое содержит событие.

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

public class TimeOfDayVO {
    public var monday:String;
    public var tuesday:String;
    public var wednesday:String;
    public var thursday:String;
    public var friday:String;
}

Затем напишите функцию, которая будет создавать один из этих объектов для каждого часа дня.

<code>public function createTimeOfDayArray(oldArray:ArrayCollection) {
    for (var hour:int = 0; hour < 24; hour++) {
        var timeVO:TimeOfDayVO = new TimeOfDayVO();
        newArray.addItem(timeVO);
    }
    for each (obj in oldArray) {
        switch (obj.day) {
            case "Monday":
                newArray[obj.time].monday = obj.classname;
                break;
            //repeat for each day
        }
    }
}
Привязать newArray к вашей DataGrid вместо старого массива.
1 голос
/ 04 марта 2010

Если я правильно понимаю, что вы ищете, вот что я придумала.

По сути, просто создайте столбец для каждого дня в вашей таблице данных и свяжите их с любым значением, которое вы хотите в своей коллекции ArrayCollection. Затем установите для свойства visible для столбца этого дня значение true на основе значений в ArrayCollection. Надеюсь, это поможет!

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:ArrayCollection id="arrColl">
        <mx:source>
            <mx:Array>
                <mx:Object theClass="Class1" time="10:00" day="Monday"/>
                <mx:Object theClass="Class1" time="2:00" day="Wednesday"/>
                <mx:Object theClass="Class2" time="8:00" day="Tuesday"/>
                <mx:Object theClass="Class3" time="9:30" day="Tuesday"/>
                <mx:Object theClass="Class4" time="10:00" day="Friday"/>
                <mx:Object theClass="Class4" time="12:00" day="Thursday"/>
            </mx:Array>
        </mx:source>
    </mx:ArrayCollection>

    <mx:DataGrid id="dataGrid"
            dataProvider="{arrColl}"
            width="400"
            rowCount="6">
        <mx:columns>
            <mx:DataGridColumn dataField="theClass" />
            <mx:DataGridColumn dataField="time" />
            <mx:DataGridColumn headerText="Monday" dataField="time">
              <mx:itemRenderer>
                <mx:Component>
                    <mx:HBox>
                        <mx:Label text="{data.time}" visible="{data.day == 'Monday'}" />
                    </mx:HBox>
                </mx:Component>
              </mx:itemRenderer>
            </mx:DataGridColumn>
            <mx:DataGridColumn headerText="Tuesday" dataField="time">
              <mx:itemRenderer>
                <mx:Component>
                    <mx:HBox>
                        <mx:Label text="{data.time}" visible="{data.day == 'Tuesday'}" />
                    </mx:HBox>
                </mx:Component>
              </mx:itemRenderer>
            </mx:DataGridColumn>
            <mx:DataGridColumn headerText="Wednesday" dataField="time">
              <mx:itemRenderer>
                <mx:Component>
                    <mx:HBox>
                        <mx:Label text="{data.time}" visible="{data.day == 'Wednesday'}" />
                    </mx:HBox>
                </mx:Component>
              </mx:itemRenderer>
            </mx:DataGridColumn>
            <mx:DataGridColumn headerText="Thursday" dataField="time">
              <mx:itemRenderer>
                <mx:Component>
                    <mx:HBox>
                        <mx:Label text="{data.time}" visible="{data.day == 'Thursday'}" />
                    </mx:HBox>
                </mx:Component>
              </mx:itemRenderer>
            </mx:DataGridColumn>
            <mx:DataGridColumn headerText="Friday" dataField="time">
              <mx:itemRenderer>
                <mx:Component>
                    <mx:HBox>
                        <mx:Label text="{data.time}" visible="{data.day == 'Friday'}"/>
                    </mx:HBox>
                </mx:Component>
              </mx:itemRenderer>
            </mx:DataGridColumn>
        </mx:columns>
    </mx:DataGrid>

</mx:Application>
0 голосов
/ 02 марта 2010

Я не получил проблему точно, но, возможно, она похожа на проблему, с которой я столкнулся с advanceddatagrid некоторое время назад. Может быть, решение от Robusto может быть полезным и здесь. Вставить его ниже для вашей справки.

<mx:Repeater id="rp" dataProvider="{yourArrayCollection}"> 
  <mx:AdvancedDataGridColumns dataField="{rp.currentItem.fieldName}" visible="{rp.currentItem.show}"> 
</mx:Repeater> 
...