我想以編程方式滾動mx.DataGrid。 在that case,我確實強制通過以下代碼滾動到右端。mx.DataGrid:如何以編程方式強制滾動到右端?
grid.horizontalScrollPosition = grid.maxHorizontalScrollPosition;
但是在某些情況下,maxHorizontalScrollPosition返回的值不正確。
看來maxHorizontalScrollPosition是計算值取決於網格寬度和列寬度,有時是錯誤的。
以下代碼是可重現的測試用例。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
private var arr:ArrayCollection = new ArrayCollection([
{COL1:"aaa",COL2:"bbb",COL3:"ccc",COL4:"ddd",COL5:"eee",COL6:"fff",COL7:"ggg",COL8:"hhh",COL9:"iii",COL10:"jjj",COL11:"kkk",COL12:"lll",COL13:"mmm",COL14:"nnn",COL15:"ooo",COL16:"ppp",COL17:"qqq",COL18:"rrr",COL19:"sss",COL20:"ttt",COL21:"uuu",COL22:"vvv",COL23:"www"}
]);
public function init(): void
{
grid.dataProvider = arr;
}
public function doScroll(): void
{
// this doesn't scroll to the right end sometimes.
grid.horizontalScrollPosition = grid.maxHorizontalScrollPosition;
}
]]>
</mx:Script>
<mx:Button click="{doScroll()}" label="Scroll to right"/>
<mx:DataGrid id="grid" y="30" width="1000" horizontalScrollPolicy="on">
<mx:columns>
<mx:DataGridColumn headerText="COL1" dataField="COL1" width="70"/>
<mx:DataGridColumn headerText="COL2" dataField="COL2" width="210"/>
<mx:DataGridColumn headerText="COL3" dataField="COL3" width="80"/>
<mx:DataGridColumn headerText="COL4" dataField="COL4" width="100"/>
<mx:DataGridColumn headerText="COL5" dataField="COL5" width="25"/>
<mx:DataGridColumn headerText="COL6" dataField="COL6" width="25"/>
<mx:DataGridColumn headerText="COL7" dataField="COL7" width="25"/>
<mx:DataGridColumn headerText="COL8" dataField="COL8" width="70"/>
<mx:DataGridColumn headerText="COL9" dataField="COL9" width="55"/>
<mx:DataGridColumn headerText="COL10" dataField="COL10" width="160"/>
<mx:DataGridColumn headerText="COL11" dataField="COL11" width="25"/>
<mx:DataGridColumn headerText="COL12" dataField="COL12" width="25"/>
<mx:DataGridColumn headerText="COL13" dataField="COL13" width="25"/>
<mx:DataGridColumn headerText="COL14" dataField="COL14" width="25"/>
<mx:DataGridColumn headerText="COL15" dataField="COL15" width="25"/>
<mx:DataGridColumn headerText="COL16" dataField="COL16" width="25"/>
<mx:DataGridColumn headerText="COL17" dataField="COL17" width="25"/>
<mx:DataGridColumn headerText="COL18" dataField="COL18" width="100"/>
<mx:DataGridColumn headerText="COL19" dataField="COL19" width="150"/>
<mx:DataGridColumn headerText="COL20" dataField="COL20" width="100"/>
<mx:DataGridColumn headerText="COL21" dataField="COL21" width="150"/>
<mx:DataGridColumn headerText="COL22" dataField="COL22" width="100"/>
<mx:DataGridColumn headerText="COL23" dataField="COL23" width="100"/>
</mx:columns>
</mx:DataGrid>
</mx:Application>
什麼是強制滾動到右端的正確方法?
我正在使用Flex SDK3.4。
更新時間: 09月17日15:28(JST)
至於我看到的 「覆蓋保護功能configureScrollBars()」(在DataGrid.as定義),似乎maxHorizontalScrollPosition由
maxHorizontalScrollPosition = displayableColumns.length - lockedColumnCount - colCount;
計算
在我的情況
displayableColumns.length(Columns with visible="true") = 23
lockedColumnCount = 0
colCount = visibleColumns.length = 17 (sum of COL1 ~ COL17 width is 995)
maxHorizontalScrollPosition的那麼初始值肯定返回6.
每當我在某處移動scrollThumb,visibleColumns.length和maxHorizontalScrollPosition也會根據scrollThumb的位置進行更改。
嗯..這意味着我不應該使用maxHorizontalScrollPosition。 但是,正確的方法是什麼?