Как автоматизировать вертикальную прокрутку в Flex AdvancedDataGrid при перетаскивании элемента ниже нижней части видимых строк?

StackOverflow https://stackoverflow.com/questions/2913420

Вопрос

У меня есть AdvancedDataGrid с XML DataProvider. Перетащите включенные и работают в видимых рядах ADG.

Тем не менее, если я попытаюсь перетащить элемент мимо нижнего видимого ряда ADG, ADG не прокручивается для отображения следующих строк, что делает невозможным перетаскивание за пределы сразу видимых строк. Хотя это, похоже, это будет логическое поведение по умолчанию DataGrid (перетащите на дно и продолжать перетаскивать, чтобы показать последующие строки), скидка, очевидно, не делает так. Я Flammoxed, как реализовать это программически.

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

Это было полезно?

Решение

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

Дайте мне знать, если вам нужен код SNIP, но вы должны быть в состоянии выяснить, как сделать все это.

Другие советы

Это сработало для меня, от решения Андре, но также проверяя на MaxVerticalScrollPosition, и я расширял ADG

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

        autoScoll(dropIndex);
    }

    //to have the adg scroll when dragging
    //http://stackoverflow.com/questions/2913420/how-to-automate-vertical-scrolling-in-flex-advanceddatagrid-when-dragging-item-be
    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;
        }
    }

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

Так что это то, что я оказался:

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;
}

}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top