目に見える行の下部にアイテムをドラッグするときに、Flex AdvancedDatagridで垂直スクロールを自動化する方法は?
-
04-10-2019 - |
質問
XML DataProviderを使用したAdvancedDatagridがあります。有効にドラッグアンドドロップし、ADGの可視行内で動作します。
ただし、ADGの一番下の目に見える行を通過してアイテムをドラッグしようとすると、ADGはスクロールして次の行を表示しないため、すぐに表示される行を超えてドラッグアンドドロップすることができなくなります。これは、Datagridの論理的なデフォルトの動作(下にドラッグしてドラッグを続けて後続の行を表示する)のように思われますが、Flexは明らかにそのようにはしません。私はこのプログラムを実装する方法をflummoxにしました。
誰かが助けることができますか?
解決
私は過去にいくつかのアイテムでこれをしなければなりませんでしたが、基本的に私がしたことは、DGのマウスy位置を監視することでした。上または下から50ピクセル以下の場合、DG += = = =必要に応じて20または - = 20。
コードスニップが必要な場合はお知らせくださいが、これらすべてを行う方法を把握できるはずです。
他のヒント
これは、Andreのソリューションから私のために機能しましたが、MaxverticalScrollopsitionをチェックし、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;
}
}
フレックスを愛するようになった、男。明白なものには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;
}
}
所属していません StackOverflow