스크롤하지 않고 데이터그리드 구성 요소를 데이터 바인딩하는 방법은 무엇입니까?

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

문제

5 초마다 업데이트하려는 Datagrid 구성 요소가 있습니다. 이 DataGrid에 행이 추가되면 모든 업데이트로 인해 스크롤 막대 위치를 상단으로 재설정합니다. 스크롤 막대를 이전 위치에 유지하려면 어떻게해야합니까?

도움이 되었습니까?

해결책 2

나는 약간의 확장 수업을 썼다 DataGrid 기반 이 기사. 잘 작동하는 것 같습니다.

public final class DataGridEx extends DataGrid
{
    public var maintainScrollAfterDataBind:Boolean = true;

    public function DataGridEx()
    {
        super();
    }       

    override public function set dataProvider(value:Object):void {
        var lastVerticalScrollPosition:int = this.verticalScrollPosition;
        var lastHorizontalScrollPosition:int = this.horizontalScrollPosition;

        super.dataProvider = value;

        if(maintainScrollAfterDataBind) {
            this.verticalScrollPosition = lastVerticalScrollPosition;
            this.horizontalScrollPosition = lastHorizontalScrollPosition;
        }
}   

다른 팁

마지막 스크롤 위치를 저장하고 사용하는 변수를 만드십시오.

대략 :

var lastScroll:Number = 0;

private function creationCompleteHandler(event:FlexEvent):void{
stage.addEventListener(MouseEvent.MOUSE_UP, updateLastScroll);
}

private function updateLastScroll(event:MouseEvent):void{
lastScroll = myDataGrid.verticalScrollPosition
}
private function dataGridHandler(event:Event):void{
myDataGrid.verticalScrollPosition = lastScroll;
}

최고의 코드는 아니지만 요점을 보여줍니다. 누군가 스크롤 이벤트를 완료 할 때마다 마지막 위치를 변수로 저장하고 새 데이터를 추가 한 직후에 스크롤 위치를 복원하는 데 사용합니다.

이 코드를 테스트하지는 않았지만 작동해야합니다.

var r:IListItemRenderer;
var len:Number = dataGrid.dataProvider.length;
var i:Number;
//indexToItemRenderer returns null for items that are not visible
for(i = 0; i < len; i++)
{
  r = dataGrid.indexToItemRenderer(i);
  if(r)
    break;
}
//now i contains the first visible item - store this in a variable
lastPos = i;

//update the dataprovider here.

//now scroll to the position
dataGrid.scrollToIndex(lastPos);

도움이 될 수 있습니다 :

비동기 포스트 백 후에 스크롤 위치를 유지하십시오
포스트 백에서 스크롤 위치를 유지합니다 (이것을 읽으려면 더 아래로 스크롤하십시오)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top