1

我有一个带有 XML dataProvider 的 AdvancedDataGrid。拖放启用,并在 ADG 的可见行内工作。

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

任何人都可以帮忙吗?

4

3 回答 3

2

过去我必须对一些项目执行此操作,基本上我所做的是监视 DG 中的鼠标 Y 位置,如果它距离顶部或底部 50 或更少像素,那么我将设置 DG += 的垂直滚动位置20 或 -= 20 根据需要。

如果您需要代码片段,请告诉我,但您应该能够弄清楚如何完成所有这些工作。

于 2010-05-26T15:34:33.100 回答
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;
}

}
于 2010-10-11T07:30:04.533 回答
1

这对我有用,来自 Andre 的解决方案,但也检查 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;
        }
    }
于 2011-09-08T08:43:24.983 回答