как отобразить общую сумму строк в сетке данных в flex - PullRequest
1 голос
/ 28 сентября 2011

У меня есть AdvanceDataGrid.Как я могу показать сумму каждого столбца в нижней части.Я могу рассчитать итоговое значение и попытался отобразить их на ярлыках под каждым столбцом, указав ширину в качестве ширины столбца.Но они не выровнены должным образом под каждым столбцом.

<mx:Label id="TotalMonth" text="{numberFormatter.format(totalMonthAmount)}" width="{colWidth}"/>

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

1 Ответ

2 голосов
/ 28 сентября 2011

У вас есть два варианта для этого. Во-первых, это использовать другую расширенную сетку данных, а другую - изменить ваш dataProvider.

Допустим, у вас есть arrayCollection объектов типа MockData

    public class MockData
{
    public var value1:Number;
    public var value2:Number;
    public var value3:Number;
    public var value4:Number;
}

Параметр двух сеток данных должен выглядеть примерно так:

<?xml version="1.0" encoding="utf-8"?>

        protected function getSummedResult(value:Object):ArrayCollection
        {
            var summedResult:MockData = new MockData();
            summedResult.value1 = 0;
            summedResult.value2 = 0;
            summedResult.value3 = 0;
            summedResult.value4 = 0;

            for each (var data:MockData in value as ArrayCollection)
            {
                summedResult.value1 += data.value1;
                summedResult.value2 += data.value2;
                summedResult.value3 += data.value3;
                summedResult.value4 += data.value4;
            }

            return new ArrayCollection([summedResult]);
        }

    ]]>
</fx:Script>
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
    <s:ArrayCollection id="mockData">
        <mock:MockData 
            value1="{Math.random() * 10}" 
            value2="{Math.random() * 100}"
            value3="{Math.random() * 1000}"
            value4="{Math.random() * 10000}"/>
        <mock:MockData 
            value1="{Math.random() * 10}" 
            value2="{Math.random() * 100}"
            value3="{Math.random() * 1000}"
            value4="{Math.random() * 10000}"/>
        <mock:MockData 
            value1="{Math.random() * 10}" 
            value2="{Math.random() * 100}"
            value3="{Math.random() * 1000}"
            value4="{Math.random() * 10000}"/>
        <mock:MockData 
            value1="{Math.random() * 10}" 
            value2="{Math.random() * 100}"
            value3="{Math.random() * 1000}"
            value4="{Math.random() * 10000}"/>
        <mock:MockData 
            value1="{Math.random() * 10}" 
            value2="{Math.random() * 100}"
            value3="{Math.random() * 1000}"
            value4="{Math.random() * 10000}"/>
        <mock:MockData 
            value1="{Math.random() * 10}" 
            value2="{Math.random() * 100}"
            value3="{Math.random() * 1000}"
            value4="{Math.random() * 10000}"/>
        <mock:MockData 
            value1="{Math.random() * 10}" 
            value2="{Math.random() * 100}"
            value3="{Math.random() * 1000}"
            value4="{Math.random() * 10000}"/>
    </s:ArrayCollection>
</fx:Declarations>
<mx:VBox>
    <mx:AdvancedDataGrid id="dateGrid" dataProvider="{mockData}" />
    <mx:AdvancedDataGrid rowCount="2"
                         id="dateGrid2" dataProvider="{getSummedResult(dateGrid.dataProvider)}" />
</mx:VBox>

Второй вариант - использовать только одну сетку, подобную этой:

<mx:AdvancedDataGrid id="dateGrid" dataProvider="{getSummedResult(mockData)}" />


            protected function getSummedResult(value:Object):ArrayCollection
        {
            var dataProvider:ArrayCollection = ArrayCollection(value);
            var summedResult:MockData = new MockData();
            summedResult.value1 = 0;
            summedResult.value2 = 0;
            summedResult.value3 = 0;
            summedResult.value4 = 0;
            for each (var data:MockData in dataProvider)
            {
                summedResult.value1 += data.value1;
                summedResult.value2 += data.value2;
                summedResult.value3 += data.value3;
                summedResult.value4 += data.value4;
            }

            var result:ArrayCollection = new ArrayCollection(dataProvider.source.concat());
            result.addItem(summedResult);

            return result;
        }

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

Удачи и удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...