我有一个带有 XML dataProvider 的 AdvancedDataGrid。拖放启用,并在 ADG 的可见行内工作。
但是,如果我尝试将项目拖过 ADG 的最底部可见行,则 ADG 不会滚动以显示下一行,这使得无法拖放到立即可见的行之外。尽管这似乎是数据网格的逻辑默认行为(拖动到底部并继续拖动以显示后续行),但 Flex 显然不会那样做。我对如何以编程方式实现这一点感到困惑。
任何人都可以帮忙吗?
我有一个带有 XML dataProvider 的 AdvancedDataGrid。拖放启用,并在 ADG 的可见行内工作。
但是,如果我尝试将项目拖过 ADG 的最底部可见行,则 ADG 不会滚动以显示下一行,这使得无法拖放到立即可见的行之外。尽管这似乎是数据网格的逻辑默认行为(拖动到底部并继续拖动以显示后续行),但 Flex 显然不会那样做。我对如何以编程方式实现这一点感到困惑。
任何人都可以帮忙吗?
过去我必须对一些项目执行此操作,基本上我所做的是监视 DG 中的鼠标 Y 位置,如果它距离顶部或底部 50 或更少像素,那么我将设置 DG += 的垂直滚动位置20 或 -= 20 根据需要。
如果您需要代码片段,请告诉我,但您应该能够弄清楚如何完成所有这些工作。
必须爱 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;
}
}
这对我有用,来自 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;
}
}