Posts Tagged ‘DragDrop’

拖拉物件從ListBase 到 AdvancedListBase

Monday, April 7th, 2008

把傳統的ListBase item 拖拉到 AdvancedListBase 基本上是不會成功的,因為在DragSource::dataFormat,一個是"items", 一個是"treeDataGridItems" ,我們可在DragDrop發生之前,用DragSource::addData()改變DragEvent::dragSource 內資料定義即可, 這樣ADG就會Accept Drop了(會顯示Drop Feedback)

Actionscript:
  1. function onDragEnter(event:DragEvent):void{
  2. event.dragSource.addData( myObject , "treeDataGridItems" );
  3. }

發現一些好用的方法:
可以得到目前拖放物件在List中的索引位置!
AdvancedListBase::calculateDropIndex ( event:DragEvent ) : int

藉由索引值取得對應的itemRenderer instance
AdvancedListBase::indexToItemRenderer( index :int ):IListItemRenderer

結合兩者:

Actionscript:
  1. function onDragDrop(event:DragEvent){
  2. var ir:IListItemRenderer = adg.indexToItemRenderer( adg.calculateDropIndex (event ) );
  3. var myData:Object = ir.data;
  4. var hv:HierarchicalCollectionView = adg.dataProvider as HierarchicalCollectionView;
  5. //取得父節點,插入新物件
  6. var parentNode : Object = hv.getParentItem( myData );
  7. var myNewData:Object = event.dragSource.dataForFormat("treeDataGridItems"); //取出新物件
  8. hv.addChildAt( parentNode, myData , 0 ); //放入
  9.  
  10. adg.validateNow();
  11. }