Как автоматизировать вертикальную прокрутку в Flex AdvancedDataGrid при перетаскивании элемента ниже нижней части видимых строк? - PullRequest
1 голос
/ 26 мая 2010

У меня есть AdvancedDataGrid с XML dataProvider.Функция перетаскивания включена и работает в видимых строках ADG.

ОДНАКО, если я пытаюсь перетащить элемент за самую нижнюю видимую строку ADG, ADG НЕ прокручивается, чтобы отобразитьследующие строки, что делает невозможным перетаскивание за пределы сразу видимых строк.Хотя это может показаться логичным поведением сетки данных по умолчанию (перетаскивание вниз и продолжайте перетаскивание, чтобы отобразить последующие строки), Flex, очевидно, не делает этого так.Я сбит с толку, как реализовать это программно.

Кто-нибудь может помочь?

Ответы [ 3 ]

2 голосов
/ 26 мая 2010

В прошлом мне приходилось делать это с несколькими предметами. По сути, я следил за положением мышки Y в DG, если он был на 50 или меньше пикселей сверху или снизу, то я бы установил вертикальную прокрутку положения DG + = 20 или - = 20, если требуется.

Дайте мне знать, если вам нужен фрагмент кода, но вы сможете понять, как все это сделать.

1 голос
/ 08 сентября 2011

это сработало для меня, из решения Андре, но и для проверки maxVerticalScrollPosition и я расширял ADG

    protected function onDragOver(event:DragEvent):void
    {
        var dropIndex:int = calculateDropIndex(event);

        autoScoll(dropIndex);
    }

    //to have the adg scroll when dragging
    ///1526912/avtomatizirovat-vertikalnuy-prokrutku-advanceddatagrid-peretaskivanii-elementa-nizhe-nizhnei-chasti-vidimyh-strok
    protected function autoScoll(dropIndex:int):void
    {
        var rowsDisplayed:Number = rowCount;
        var topvisibleIndex:int = verticalScrollPosition;
        var botvisibleIndex:int = topvisibleIndex + rowsDisplayed;

        if (dropIndex <= topvisibleIndex)
        {
            verticalScrollPosition = Math.max(verticalScrollPosition - 1, 0);
        }
        else if (dropIndex >= botvisibleIndex - 1 && dropIndex < (rowCount + maxVerticalScrollPosition - 1))
        {
            verticalScrollPosition += 1;
        }
    }
1 голос
/ 11 октября 2010

Должен любить Флекса, чувак. Где очевидные вещи занимают массу времени.

Так вот что я в итоге сделал:

mygrid.addEventListener( DragEvent.DRAG_OVER, handleDragOver);



public function handlerDragOver(event:DragEvent):void{
var dropIndex:int        = mygrid.calculateDropIndex(event);
var rowsDisplayed:Number = mygrid.rowCount;
var topvisibleIndex:int  = mygrid.verticalScrollPosition;
var botvisibleIndex:int  = topvisibleIndex + rowsDisplayed;


if ( dropIndex <= topvisibleIndex) {

    mygrid.verticalScrollPosition = Math.max( mygrid.verticalScrollPosition- 1, 0 );

} else if( dropIndex >= botvisibleIndex - 1 ){

mygrid.verticalScrollPosition += 1;
}

}
...