1

したがって、Canvas内に存在する必要があるAdvancedDataGridがあります。私の問題は、このようなことをすると、2セットのスクロールバーが表示されることです。また、AdvancedDataGridの水平スクロールバーは、右から左にスクロールするとサイズが変わり、右端までスクロールできなくなります。これは奇妙に思えます。

AdvancedDataGridで水平スクロールをオフにして、Canvasだけに処理させました。ただし、これを行うと、列のサイズを変更できなくなります。うーん。

私の現在の「最善の」解決策は、AdvancedDataGridに垂直スクロールを処理させ、Canvasに水平スクロールを処理させることですが、これは非常識に思えます。言うまでもなく、列のサイズを変更できなくなるという上記の問題が発生します。

どんな助けでも大歓迎です!ありがとう!

4

2 に答える 2

4

AdvancedDataGridの水平スクロールは、表示されている列の幅に基づいて水平スクロールサムのサイズを変更するという点で、やや独特です。実際には親指を最後までドラッグできますが、数回の試行が必要になる場合があります。(分かった分かった ...)

AdvancedDataGridには、ビューポートの外側に実際にレンダリングされるものは何もないため、サイズ設定は、知識に基づいた(ある程度知識のある)推測にすぎないことに注意してください。アドビは、巨大なグリッドがクロールに陥らないようにこれを行います(ウィンドウのサイズを変更するたびに、15,000セルのitemRendererでメジャーメソッドを実行することを想像してください)。

私のアドバイスは、Canvasで垂直スクロールポリシーと水平スクロールポリシーの両方をオフにし、ADGでスクロールを処理できるようにすることです。それは醜いですが、それは代替案を打ち負かします。とにかくADGは面倒で厄介な矛盾であり、それがAdobeがADGをオープンソース化した理由かもしれません。私は何度もそれを二度と使用しないと誓った。次回その機能が必要になるまで、その誓いを守ることができました。これは約毎週です。

于 2010-07-23T16:37:32.903 に答える
1

AdvancedDataGridはキャンバス内の唯一のものですか?

AdvancedDataGridのサイズを完全な高さと幅に設定し、Canvasにスクロールを処理させます。

キャンバスで、updateDisplayListメソッドをオーバーライドし、次のようにします。

protected function updateDisplayList(unscaledWidth: Number, unscaledHeight: Number):void{
 super.updateDisplayList, unscaledHeight);
 this.myAdvancedDataGrid.setActualSize(this.myAdvancedDataGrid.measuredHeight, this.myAdvancedDataGrid.measuredWidth );
}

このように、AdvancedDataGridにはスクロールバーがないはずです。ただし、下または右に伸びすぎると、スクロールバーがキャンバスに表示されます。

FlexCoordinateSystemを読むことでメリットが得られる場合があります。AdvancedDataGridは「コンテンツ」であり、Canvasはローカルです。


私の提案をデモするために、完全に実行されているコードサンプルを追加しています。

これは、AdvancedDataGridが内部にあるキャンバスコンポーネントです:com.flextras.stackOverflow.CanvasWithGrid

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;

            override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
                super.updateDisplayList(unscaledWidth, unscaledHeight);
                this.myADG.setActualSize(this.myADG.measuredWidth, this.myADG.measuredWidth );
            }

            [Bindable]
            private var dpFlat:ArrayCollection = new ArrayCollection([
                {Region:"Southwest", Territory:"Arizona", 
                    Territory_Rep:"Barbara Jennings", Actual:38865, Estimate:40000}, 
                {Region:"Southwest", Territory:"Arizona", 
                    Territory_Rep:"Dana Binn", Actual:29885, Estimate:30000},  
                {Region:"Southwest", Territory:"Central California", 
                    Territory_Rep:"Joe Smith", Actual:29134, Estimate:30000},  
                {Region:"Southwest", Territory:"Nevada", 
                    Territory_Rep:"Bethany Pittman", Actual:52888, Estimate:45000},  
                {Region:"Southwest", Territory:"Northern California", 
                    Territory_Rep:"Lauren Ipsum", Actual:38805, Estimate:40000}, 
                {Region:"Southwest", Territory:"Northern California", 
                    Territory_Rep:"T.R. Smith", Actual:55498, Estimate:40000},  
                {Region:"Southwest", Territory:"Southern California", 
                    Territory_Rep:"Alice Treu", Actual:44985, Estimate:45000}, 
                {Region:"Southwest", Territory:"Southern California", 
                    Territory_Rep:"Jane Grove", Actual:44913, Estimate:45000}
            ]);

        ]]>
    </fx:Script>

    <mx:AdvancedDataGrid id="myADG" 

                         initialize="gc.refresh();"> <!--  width="100%" height="100%"  -->       
        <mx:dataProvider>
            <mx:GroupingCollection id="gc" source="{dpFlat}">
                <mx:grouping>
                    <mx:Grouping>
                        <mx:GroupingField name="Region"/>
                        <mx:GroupingField name="Territory"/>
                    </mx:Grouping>
                </mx:grouping>
            </mx:GroupingCollection>
        </mx:dataProvider>        

        <mx:columns>
            <mx:AdvancedDataGridColumn dataField="Region"/>
            <mx:AdvancedDataGridColumn dataField="Territory"/>
            <mx:AdvancedDataGridColumn dataField="Territory_Rep"
                                       headerText="Territory Rep"/>
            <mx:AdvancedDataGridColumn dataField="Actual"/>
            <mx:AdvancedDataGridColumn dataField="Estimate"/>
        </mx:columns>
    </mx:AdvancedDataGrid>

</mx:Canvas>

これはメインのアプリケーションファイルです。

<?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" xmlns:stackOverflow="com.flextras.stackOverflow.*">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>

    <stackOverflow:CanvasWithGrid width="200" height="200" />


</s:Application>
于 2010-07-23T16:37:40.283 に答える