我有一个带有XML DataProvider的高级Datagrid。拖动启用启用,并在ADG的可见行中工作。

但是,如果我试图将项目拖到ADG的最底部可见行中,则ADG不会滚动以显示下一行,这使得无法将拖动拖放到立即可见的行之外。尽管这似乎是datagrid的逻辑默认行为(拖到底部并继续拖动以揭示后续行),但Flex显然不会那样做。我对如何以编程方式实施此操作感到困惑。

谁能帮忙?

有帮助吗?

解决方案

我过去必须用几个项目来执行此操作,基本上我要做的就是监视DG中的鼠标位置,如果从顶部或底部的像素是50或更少的像素,那么我将设置DG +=的垂直旋转。根据需要20或 - = 20。

让我知道您是否需要代码剪切,但是您应该能够弄清楚如何完成所有这些。

其他提示

这对我来说是从安德烈的解决方案中起作用的

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

爱弹性,伙计。显而易见的东西需要大量时间。

所以这就是我最终所做的:

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