英文原文:http://www.cflex.net/showfiledetails.cfm?ChannelID=1&Object=File&objectID=735
有些时候,我们需要在DataGrid控件中显示当前行的行号,如果DataGrid的数据库源(dataProvider)是一个Collection的话,这个问题就好处理了,只需要在DataGrid中增加一虚拟计算列,通过自定义该列的labelFunction,并在该Function调用getItemIndex中计算当前行的index并加上1就再以字符返回就可以了,注意:这些行号是动态生成的,总是按一定的顺序,并且与其他列的排序没有关系,如果你想让行号随着行的变化而变化的话(通常是对某一列进行排序时),那么你就需要为所有行重新分配行号,这需要在dataProvider中自己用程序来控制,示例代码如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="initApp()">
<mx:Script><![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
[Bindable]private var _acDP:ArrayCollection;
public function initApp():void
{
var oItem:Object;
_acDP = new ArrayCollection();
oItem = {Album:"The Lost Chord", Artist:"The Moody Blues", Price:"15.99" };
_acDP.addItem(oItem);
oItem = {Album:"Meddle", Artist:"Pink Floyd", Price:"17.99" };
_acDP.addItem(oItem);
oItem = {Album:"Trespass", Artist:"Genesis", Price:"18.99" };
_acDP.addItem(oItem);
}//initApp
private function lfRowNum(oItem:Object,iCol:int):String
{
var iIndex:int = _acDP.getItemIndex(oItem) + 1;
return String(iIndex);
}
]]></mx:Script>
<mx:VBox>
<mx:DataGrid id="dgSource" dataProvider="{_acDP}"
editable="true" >
<mx:columns>
<mx:Array>
<mx:DataGridColumn headerText="Row#" labelFunction="lfRowNum" />
<mx:DataGridColumn headerText="Album" dataField="Album" />
<mx:DataGridColumn headerText="Artist" dataField="Artist" />
<mx:DataGridColumn headerText="Price" dataField="Price" />
</mx:Array>
</mx:columns>
</mx:DataGrid>
</mx:VBox>
</mx:Application>
null