2011-10-31 20 views
0

就數據完整性而言,我認爲把一個子對象作爲ArrayCollection就好了。那麼爲什麼我的AdvancedDataGrid renderProvider會渲染每個子節點呢?我只是不明白。 (我的renderProvider是一個DataGrid)。這會爲每個新項目創建一個新的數據網格。我的數據結構有什麼問題?

我希望我不必重寫我的數據結構。

下面的代碼:

recalls.addItem( 
       new ObjectProxy(
        { 
         selected:false, 
         id:1001, 
         cpty:'MERRILLINTL', 
         ticker:'PG:IT', 
         secId:'7743621', 
         origQty:8150, 
         currQty:8150, 
         rebate:-5.25, 
         div:100, 
         dueDate:'7/1/2011', 
         status:'New', 
         comments:'', 
         children:new ArrayCollection([ 
          { 
           sid:96548714, 
           type:'BVRI', 
           secType:'COMMON', 
           ticker:'PG:IT', 
           cpty:'MERRILLINTL', 
           cusip:'T8380H120', 
           sedol:'7743621', 
           rate:-5.25, 
           qty:20000, 
           recallQty:20000 
          }, 
          { 
           sid:23544165, 
           type:'BVRI', 
           secType:'COMMON', 
           ticker:'PG:IT', 
           cpty:'MERRILLINTL', 
           cusip:'T8380H120', 
           sedol:'7743621', 
           rate:-5.25, 
           qty:5000, 
           recallQty:5000 
          } 
         ]), 
         trades:new ArrayCollection([ 
          { 
           sid:12211214, 
           type:'BVRI', 
           secType:'COMMON', 
           ticker:'PG:IT', 
           cpty:'MERRILLINTL', 
           cusip:'T8380H120', 
           sedol:'7743621', 
           rate:-5.25, 
           qty:1700, 
           recallQty:1700 
          }, 
          { 
           sid:32112256, 
           type:'BVRI', 
           secType:'COMMON', 
           ticker:'PG:IT', 
           cpty:'MERRILLINTL', 
           cusip:'T8380H120', 
           sedol:'7743621', 
           rate:-5.25, 
           qty:6450, 
           recallQty:6450 
          } 
         ]) 
        } 
       ) 
      ); 
      recalls.addItem( 
       new ObjectProxy(
        { 
         selected:false, 
         id:1002, 
         cpty:'GSAL', 
         ticker:'TH:CA', 
         secId:'82934H101', 
         origQty:5400, 
         currQty:5400, 
         rebate:-2, 
         div:100, 
         dueDate:'8/9/2011', 
         status:'New', 
         comments:'', 
         children:new ArrayCollection([ 
          { 
           sid:32555688, 
           type:'BVRI', 
           secType:'COMMON', 
           ticker:'TH:CA', 
           cpty:'GSAL', 
           cusip:'88338H100', 
           sedol:2889906, 
           rate:-2, 
           qty:7500, 
           recallQty:7500 
          }, 
          { 
           sid:65487745, 
           type:'BVRI', 
           secType:'COMMON', 
           ticker:'TH:CA', 
           cpty:'GSAL', 
           cusip:'88338H100', 
           sedol:2889906, 
           rate:-2, 
           qty:3500, 
           recallQty:3500 
          } 
         ]), 
         trades:new ArrayCollection([ 
          { 
           sid:14445784, 
           type:'BVRI', 
           secType:'COMMON', 
           ticker:'TH:CA', 
           cpty:'GSAL', 
           cusip:'88338H100', 
           sedol:2889906, 
           rate:-2, 
           qty:3200, 
           recallQty:3200 
          }, 
          { 
           sid:96552544, 
           type:'BVRI', 
           secType:'COMMON', 
           ticker:'TH:CA', 
           cpty:'GSAL', 
           cusip:'88338H100', 
           sedol:2889906, 
           rate:-2, 
           qty:2200, 
           recallQty:2200 
          } 
         ]) 
        } 
       ) 
      ); 

以上的ArrayCollection是dataProvider中我AdvancedDataGrid。這是ADG的DP。

<mx:dataProvider>  

         <mx:HierarchicalData 
          source="{recalls}"/>  

        </mx:dataProvider> 

下面是該renderProvider此ADG代碼:

<mx:rendererProviders> 

         <mx:AdvancedDataGridRendererProvider 
          depth="2" 
          columnIndex="1" 
          renderer="com.controls.GroupedTradesGrid" 
          columnSpan="0"/> 

        </mx:rendererProviders> 

這裏面renderProvider,我用這個代碼來設置DP:

override public function set data(value:Object):void 
     { 
      // If using the array data source, use this instead: 
      dataProvider = value; 

      // adjust rowCount 
      this.rowCount = dataProvider.length + 1; 
     } 

基本上,新的DataGrid是爲'children'集合中的每個元素創建...而不是創建一個數據網格並將其添加到'children'集合中。這是爲什麼?

感謝您的任何有用的提示!

回答

0

不知道我得到你在做什麼,但你的dataProvider應該是一個ArrayCollection而不是一個對象。

dataProvider = "{ObjectProxy.children}" 
0

我找到了解決方法,但我不認爲這是正確的解決方案;然而,它現在必須做。我猜測我使用了錯誤的語法,並且通過將'children'屬性包含在括號中,我會很好:像這樣:

children:[new ArrayCollection([ 
         { 
          sid:96548714, 
          type:'BVRI', 
          secType:'COMMON', 
          ticker:'PG:IT', 
          cpty:'MERRILLINTL', 
          cusip:'T8380H120', 
          sedol:'7743621', 
          rate:-5.25, 
          qty:20000, 
          recallQty:20000 
         }, 
         { 
          sid:23544165, 
          type:'BVRI', 
          secType:'COMMON', 
          ticker:'PG:IT', 
          cpty:'MERRILLINTL', 
          cusip:'T8380H120', 
          sedol:'7743621', 
          rate:-5.25, 
          qty:5000, 
          recallQty:5000 
         } 
        ])]