0

私の Flex アプリケーションには、会社内のさまざまな人々が保有する株式の分布を示す円グラフがあります。

[Bindable]
        private var shareData:ArrayCollection;


    <mx:PieChart id="sharesDistribution" dataProvider="{shareData}" showDataTips="true"                              
            height="100%" width="70%"  left="0" right="0" bottom="0" top="0" >
        <mx:series>
            <mx:PieSeries field="share" nameField="name" labelPosition="insideWithCallout" />
        </mx:series>
</mx:PieChart>

<mx:Legend right="0" width="30%" direction="horizontal" dataProvider="{sharesDistribution}" />

上記のコードのとおり、円グラフは正しく表示されます。ここで私が直面している問題は....

メンバーのいずれかが 0 または 0% の株式を持っている場合があります。そのインスタンスの間、円グラフには共有を持っている人だけが表示されます。たとえば、A、B、C、および D が会社の株式を保有しているとします。ある時点で、C は株式を保有していません。円グラフには、A、B、D が保有する株式のみが表示されます。

しかし、円グラフにはそのような人物が表示されないため、凡例では人物 C も実際には正しく見えない色で示されています。あなたが私の主張を理解し、私に同意してくれることを願っています。

Cさんは凡例に出ないようにしたいです。

どうやってやるの ?親切に、あなたの答えを共有してください。

4

1 に答える 1

2

円グラフ コンポーネントは常にデータ ソースのすべてのアイテムを表示すると思います。

ArrayList の変更イベントを処理し、null 要素を含まない別のリストを定義します。

このようなもの(これは実際の例です):

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" 
           minWidth="955" minHeight="600" creationComplete="init(event)">
<fx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;
        import mx.events.CollectionEvent;
        import mx.events.FlexEvent;

        [Bindable]private var shareData:ArrayCollection = new ArrayCollection(
            [
                {name: "A", share: 20}, 
                {name: "B", share: 50},
                {name: "C", share: 0},
                {name: "D", share: 10}
            ]);

        [Bindable]private var shareDataDP:ArrayCollection = new ArrayCollection();


        protected function init(event:FlexEvent):void
        {
            shareData.addEventListener(CollectionEvent.COLLECTION_CHANGE, onCollectionChange);
            updateDP();
        }

        private function onCollectionChange(evt:CollectionEvent):void
        {
            updateDP();
        }

        private function updateDP():void
        {
            shareDataDP.removeAll();

            for each (var item:Object in shareData)
            {
                if (item.share != 0)
                {
                    shareDataDP.addItem(item);
                }
            }
        }

    ]]>
</fx:Script>

<s:VGroup left="20" top="20">

    <s:HGroup verticalAlign="bottom">
        <s:Label text="Value for C: "/>
        <s:TextInput id="valueC" text="0" width="40" restrict="0-9"/>
        <s:Button label="Change" click="{shareData.getItemAt(2).share = int(valueC.text); shareData.refresh()}"/>
    </s:HGroup>

    <s:HGroup>

        <s:Group width="300" height="300">

            <mx:PieChart id="sharesDistribution" dataProvider="{shareData}" showDataTips="true"                              
                         height="100%" width="70%"  left="0" right="0" bottom="0" top="0">
                <mx:series>
                    <mx:PieSeries field="share" nameField="name" labelPosition="insideWithCallout" />
                </mx:series>
            </mx:PieChart>

            <mx:Legend right="0" width="30%" direction="horizontal" dataProvider="{sharesDistribution}" />

        </s:Group>

        <s:Group width="300" height="300">

            <mx:PieChart id="sharesDistributionDP" dataProvider="{shareDataDP}" showDataTips="true"                              
                         height="100%" width="70%"  left="0" right="0" bottom="0" top="0">
                <mx:series>
                    <mx:PieSeries field="share" nameField="name" labelPosition="insideWithCallout" />
                </mx:series>
            </mx:PieChart>

            <mx:Legend right="0" width="30%" direction="horizontal" dataProvider="{sharesDistributionDP}" />

        </s:Group>
    </s:HGroup>
</s:VGroup>
</s:Application>
于 2013-06-10T13:00:19.330 に答える