Flex在自定义控件方面非常方便,但是由于提供的控件非常不易用,需要自行处理大量的事件和进行扩展
UI代码
<mx:DataGrid dataProvider="{Datas}" itemFocusOut="PoGrid_ItemFocusOut(event);"
keyUp="PoGrid_KeyUp(event);" keyDown="PoGrid_KeyDown(event);"
editable="true" dropEnabled="false" id="PoGrid" width="766" textAlign="left"
shadowDirection="center" shadowDistance="1" dropShadowEnabled="true" height="90">
<mx:DataGridColumn headerText="Operate" width="60" editable="false" sortable="false" >
<mx:itemRenderer>
<mx:Component>
<mx:Button label="Item" click="outerDocument.OpenItem();" ></mx:Button>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
</mx:DataGrid>
下面的事件是Grid中每个按钮触发的事件
public function OpenItem():void
{
}
//设置一个变量获得当前索引值
private function PoGrid_KeyDown(event:KeyboardEvent):void
{
var item:Object=PoGrid.selectedItem;
if(item==null)return;
if(this.PoGrid.editedItemPosition.columnIndex==PoGrid.columnCount-1)
{
if(event.keyCode== Keyboard.ENTER||event.keyCode==Keyboard.TAB )
{
PoKeyIndex=Datas.getItemIndex(item);
}
}
}
//加入在Gird最后一行按下回车或者tab键时,自动增加新的一行
private function PoGrid_KeyUp(event:KeyboardEvent):void
{
var item:Object=PoGrid.selectedItem;
if(item==null)return;
if(event.keyCode==Keyboard.UP)
{
PoGrid.selectedIndex=PoGrid.selectedIndex-1;
}
else if(event.keyCode==Keyboard.DOWN)
{
PoGrid.selectedIndex=PoGrid.selectedIndex+1;
}
if(this.PoGrid.editedItemPosition.columnIndex==PoGrid.columnCount-1)
{
if(event.keyCode== Keyboard.ENTER||event.keyCode==Keyboard.TAB )
{
var i:int=Datas.getItemIndex(item);
if(i==Datas.length-1)
{
if(PoKeyIndex==Datas.getItemIndex(item))
{
Datas.addItem({ID:UIDUtil.createUID(),No:String(Datas.length+1),PO:item.PO,Item:"",
ItemDescription:"",Color:"",Size:"",Volume:0.00,Weight:0.00,Cartons:0.00,Units:0.00,
Vendor:item.Vendor,Container:item.Container});
}
}
}
}
}