Запуск события щелчка элемента гибкой диаграммы при щелчке на элементе Datagrid

#actionscript-3 #apache-flex #actionscript #charts #flex3

#actionscript-3 #apache-flex #actionscript #Диаграммы #flex3

Вопрос:

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

Ответ №1:

Я бы сделал это немного по-другому, а затем попытался вызвать событие на диаграмме. Я бы попытался инкапсулировать вашу логику круговой диаграммы в новую функцию

Если у вас есть событие на круговой диаграмме, подобное этому:

     private function PieChartClick(event:ItemEvent):void{
       DoPieChartClick();
    }

    private function DoPieChartClick():void{
       var selectedItem = picChart.SelectedItem;
       //do the rest of your logic
    }

    private function DataGridClick(event:ItemEvent):void{
        //do your datagrid stuff
        DoPieChartClick(); //This would be like you clicked on the pie chart.
    }
  

Ответ №2:

Да, можно запускать событие ItemClick при каждом нажатии на datagrid или любой другой элемент.Здесь важно то, что индекс элемента в таблице данных должен быть функцией индекса элемента в диаграмме элементов.

Любая диаграмма содержит элемент «series», а любой элемент «series» содержит в себе массив «items». Вы можете вызвать наведение курсора мыши на этот «элемент», используя механизм запуска flex.

Ответ №3:

Привет, нашел решение после некоторого поиска в Google, спасибо за комментарии Neeraj amp; Nate.

 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Script><![CDATA[
        import mx.charts.*;
        import mx.collections.ArrayCollection;
        import mx.events.ListEvent;
        import mx.graphics.GradientEntry;
        import mx.graphics.LinearGradient;

        [Bindable]
        public var explodingArray:Array = [0,0,0,0,0,0];

        private function explodeSlice(e:ListEvent):void{
            explodingArray = [0,0,0,0,0,0];
            explodingArray[e.rowIndex]=0.1; 
            pie1.series[0].perWedgeExplodeRadius = explodingArray;
            expenses2.refresh();
        }       

        [Bindable]
        public var expenses2:ArrayCollection = new ArrayCollection([
            {Tissues: "Large Intestine", TissueCount: 149},
            {Tissues: "Lung", TissueCount: 127},            
            {Tissues: "Pancreas", TissueCount: 84},
            {Tissues: "Biliary Tract", TissueCount: 58},
            {Tissues: "Haematopoietic and Lymphoid tissue", TissueCount: 20}
        ]);     

    ]]></mx:Script>



    <mx:DataGrid dataProvider="{expenses2}" editable="false" itemClick="explodeSlice(event)" >
        <mx:columns>
            <mx:DataGridColumn dataField="TissueCount" headerText="Tissues Count"/>
            <mx:DataGridColumn dataField="Tissues" headerText="Tissues"/>
        </mx:columns>
    </mx:DataGrid>

    <mx:SeriesInterpolate id="interpolate" duration="1000"/>
    <mx:HBox>
        <mx:Panel title="Exploding Pie Chart (animated)">
            <mx:PieChart id="pie1" dataProvider="{expenses2}" showDataTips="true" selectionMode="single">
                <mx:series>
                    <mx:PieSeries field="TissueCount" nameField="Tissues" perWedgeExplodeRadius="{explodingArray}" showDataEffect="interpolate"/>
                </mx:series>
            </mx:PieChart>
            <mx:Legend dataProvider="{pie1}"/>
        </mx:Panel>
    </mx:HBox>  

</mx:Application>