Comment automatiser le défilement vertical dans Flex AdvancedDataGrid lors du déplacement produit ci-dessous en bas des lignes visibles?

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

Question

J'ai un AdvancedDataGrid avec XML dataProvider. Glisser et déposer activé, et les travaux dans les lignes visibles de l'ADG.

Cependant, si je tente de faire glisser un élément passé la ligne de fond le plus visible de l'ADG, l'ADG ne défile pas pour afficher les lignes suivantes, ce qui rend impossible de glisser-déposer au-delà des lignes immédiatement visibles. Bien que cela semble être le comportement par défaut logique d'un DataGrid (glisser vers le bas et continuer en faisant glisser pour révéler les lignes suivantes), Flex ne évidemment pas les choses de cette façon. Je Flummoxed comment mettre en œuvre cette programmation.

Quelqu'un peut-il aider?

Était-ce utile?

La solution

Je devais le faire avec quelques articles dans le passé, au fond ce que je faisais était de suivre les mouses position Y dans la DG, si elle était de 50 ou moins de pixels de haut ou en bas alors je mettrais la verticalScrollPosition du DG + = 20 ou -. = 20, au besoin

Laissez-moi savoir si vous avez besoin d'un petit bout de code, mais vous devriez être en mesure de comprendre comment faire tout cela.

Autres conseils

cela a fonctionné pour moi, de la solution d'André, mais aussi pour vérifier maxVerticalScrollPosition et i prolongeait l'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;
        }
    }

Got aimer Flex, l'homme. Là où les choses évidentes prend une tonne de temps.

Alors, ce que je fini par faire:

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

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top