Actuellement quand on scroll sur un datagrid vers les éléments du bas, si les données qui sont dans le datagrid changent, le datagrid se replace en haut.
Illustration par ce code :
CODE
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
private var nIndex:Number = 0;
[Bindable]
public var aCollec:ArrayCollection = new ArrayCollection();
private function addItem():void
{
var pobj:Object = new Object();
pobj.Field1 = nIndex;
pobj.Field2 = nIndex+1;
pobj.Field3 = nIndex+3;
nIndex++;
aCollec.addItem(pobj);
}
private function setAllData():void{
var aCollec2:ArrayCollection = new ArrayCollection();
//var nPos:Number = myDG.verticalScrollPosition;
for(var i:uint = 0; i<15; i++){
var pobj:Object = new Object();
pobj.Field1 = i;
pobj.Field2 = i+1;
pobj.Field3 = i+3;
aCollec2.addItem(pobj);
}
aCollec = aCollec2;
//myDG.verticalScrollPosition = nPos;
}
]]>
</mx:Script>
<mx:Panel width="100%" layout="vertical" title="Main Panel">
<mx:Panel width="100%" height="100%" title="Panel">
<mx:DataGrid id="myDG" dataProvider="{aCollec}" sortableColumns="false" textAlign="center" allowMultipleSelection="true" editable="false">
<mx:columns>
<mx:DataGridColumn headerText="Field1" dataField="Field1"/>
<mx:DataGridColumn headerText="Field2" dataField="Field2"/>
<mx:DataGridColumn headerText="Field3" dataField="Field3"/>
</mx:columns>
</mx:DataGrid>
</mx:Panel>
<mx:Button label="Add" click="addItem()"/>
<mx:Button label="Change" click="setAllData()"/>
</mx:Panel>
</mx:Application>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
private var nIndex:Number = 0;
[Bindable]
public var aCollec:ArrayCollection = new ArrayCollection();
private function addItem():void
{
var pobj:Object = new Object();
pobj.Field1 = nIndex;
pobj.Field2 = nIndex+1;
pobj.Field3 = nIndex+3;
nIndex++;
aCollec.addItem(pobj);
}
private function setAllData():void{
var aCollec2:ArrayCollection = new ArrayCollection();
//var nPos:Number = myDG.verticalScrollPosition;
for(var i:uint = 0; i<15; i++){
var pobj:Object = new Object();
pobj.Field1 = i;
pobj.Field2 = i+1;
pobj.Field3 = i+3;
aCollec2.addItem(pobj);
}
aCollec = aCollec2;
//myDG.verticalScrollPosition = nPos;
}
]]>
</mx:Script>
<mx:Panel width="100%" layout="vertical" title="Main Panel">
<mx:Panel width="100%" height="100%" title="Panel">
<mx:DataGrid id="myDG" dataProvider="{aCollec}" sortableColumns="false" textAlign="center" allowMultipleSelection="true" editable="false">
<mx:columns>
<mx:DataGridColumn headerText="Field1" dataField="Field1"/>
<mx:DataGridColumn headerText="Field2" dataField="Field2"/>
<mx:DataGridColumn headerText="Field3" dataField="Field3"/>
</mx:columns>
</mx:DataGrid>
</mx:Panel>
<mx:Button label="Add" click="addItem()"/>
<mx:Button label="Change" click="setAllData()"/>
</mx:Panel>
</mx:Application>
Je voudrais trouver une solution pour que le scrolling se remette à la même position après la mise à jour des données.
Comme l'exemple le montre, j'ai essayé avec verticalScrollPosition mais le datagrid a alors un comportement étrange.