Проблемы с горизонтальной / вертикальной полосой прокрутки AdvancedDataGrid. (Flex) - PullRequest
1 голос
/ 23 июля 2010

Итак, у меня есть AdvancedDataGrid, который должен находиться внутри Canvas.Моя проблема в том, что когда вы делаете что-то подобное, вы получаете два набора полос прокрутки.Кроме того, горизонтальная полоса прокрутки для AdvancedDataGrid изменяет размер при прокрутке справа налево и не позволяет прокручивать ВСЕ путь вправо, что кажется странным.

Я отключил горизонтальную прокрутку на AdvancedDataGridи пусть только Холст справится с этим.Однако, когда я это делаю, столбцы не позволяют изменять размер.Тьфу.

Мое текущее "лучшее" решение состоит в том, чтобы AdvancedDataGrid обрабатывал вертикальную прокрутку, а Canvas обрабатывал горизонтальную прокрутку, но это просто кажется безумным, не говоря уже о том, что я могу упомянуть вышеупомянутую проблему, где я могубольше не изменяйте размер столбцов.

Любая помощь очень ценится!Спасибо!

Ответы [ 2 ]

4 голосов
/ 23 июля 2010

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

Помните, что в AdvancedDataGrid на самом деле ничего не визуализируется вне области просмотра, поэтому любое определение размера - это просто обоснованное (ну, несколько образованное) предположение.Adobe делает это так, чтобы огромные сетки не сводились к ползанию (представьте, что методы измерения на 15 000 ячеек itemRenderers запускаются каждый раз, когда вы изменяете размер окна).

Мой совет - отключить политику вертикальной и горизонтальной прокрутки в Canvas и разрешить обработку прокрутки в ADG.Это некрасиво, но побеждает альтернативу.В любом случае, ADG - это громоздкая, опасная штуковина, поэтому Adobe может предложить ее с открытым исходным кодом.Я поклялся много раз, что никогда не буду использовать это снова.Я смог сохранить эту клятву только до тех пор, пока в следующий раз мне не понадобятся ее функции.Который примерно каждую неделю.

1 голос
/ 23 июля 2010

Является ли AdvancedDataGrid единственной вещью на вашем холсте?

Я бы изменил размер AdvancedDataGrid до его полной высоты и ширины и позволил бы Canvas обрабатывать прокрутку.

На холсте переопределите метод updateDisplayList и сделайте что-то вроде этого:

Таким образом, AdvancedDataGrid не должен иметь полос прокрутки.Однако, если он простирается слишком далеко или слишком далеко вправо, на холсте появятся полосы прокрутки.

Вы можете извлечь пользу из чтения в Flex Coordinate System .AdvancedDataGrid - это ваш «Контент», а Canvas - ваш локальный.


Я добавляю полный пример кода для демонстрации своего предложения.

Это компонент 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>
...