스크롤하지 않고 데이터그리드 구성 요소를 데이터 바인딩하는 방법은 무엇입니까?
-
06-07-2019 - |
문제
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);
도움이 될 수 있습니다 :
비동기 포스트 백 후에 스크롤 위치를 유지하십시오
포스트 백에서 스크롤 위치를 유지합니다 (이것을 읽으려면 더 아래로 스크롤하십시오)
제휴하지 않습니다 StackOverflow