1

У меня есть AdvancedDataGrid с XML dataProvider. Перетаскивание включено и работает внутри видимых строк ADG.Как автоматизировать вертикальную прокрутку в Flex AdvancedDataGrid при перетаскивании элемента под нижней частью видимых строк?

ОДНАКО, если я попытаюсь перетащить элемент из нижней видимой строки ADG, ADG НЕ прокручивает, чтобы отображать следующие строки, что делает невозможным перетаскивание за пределы сразу видимых строк. Хотя это, по-видимому, логическое поведение по умолчанию для datagrid (перетащить вниз и продолжить перетаскивание, чтобы выявить последующие строки), Flex, очевидно, не делает этого. Я смущен, как реализовать это программно.

Может ли кто-нибудь помочь?

ответ

2

Мне приходилось делать это с помощью нескольких предметов в прошлом, в основном то, что я делал, это отслеживать положение Y мыши в DG, если оно было 50 или меньше пикселей сверху или снизу, тогда я бы установил вертикальное размещение DG + = 20 или - = 20 по мере необходимости.

Сообщите мне, если вам нужен снимок кода, но вы должны быть в состоянии выяснить, как это сделать.

+0

да круто. хочу, чтобы мышление координировало пространство, делало все мои вычисления в dataspace, что сильно усложняет –

1

Got to love 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; 
} 

} 
1

это работает для меня, от решения Андре, но и проверка 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; 
     } 
    } 
Смежные вопросы