2011-01-04 12 views
0

以下の例では、データに応じて列のサイズを変更するために、Button ClickイベントでOptimizeDataGridメソッドを呼び出しました。一方、ボタンクリックイベントの最初のときDatagrdiの列幅だけが正しく設定されていないのに対し、関数を呼び出しました.2回目には正しく機能しています。DataGridの列幅が正しく設定されていません

例:次の文では、テキスト値は55になり、widthPaddingは25になりますが、これら2つの値の合計はdg.columns [col] .widthには含まれません。

dg.columns [col] .width = text + widthPadding;

しかし、ボタンクリックイベントの2回目にも同じことが行われています。この問題を解決するために私が助けてくれます。前もって感謝します。

<mx:Script> 
    <![CDATA[ 
     import mx.utils.ObjectUtil; 
     import mx.collections.ArrayCollection; 
     import mx.core.UITextField; 
     import mx.events.AdvancedDataGridEvent; 
     import mx.binding.utils.BindingUtils; 
     import mx.controls.Alert;   
     import mx.controls.AdvancedDataGrid; 
     import mx.controls.advancedDataGridClasses.*; 
     import mx.controls.DataGrid; 
     import mx.controls.dataGridClasses.*; 


     [Bindable] 
     private var dpFlat:ArrayCollection = new ArrayCollection([    
      {Region:"aabbCC", Territory:"Central Californiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 
       Territory_Rep:"Joe Smith", Actual:29134, Estimate:30000}, 
      {Region:"AAbbcc", Territory:"Nevada", 
       Territory_Rep:"Bethany Pittman", Actual:52888, Estimate:45000} 
     ]); 


     private function optimizeDataGrid(dg:Object,widthPadding:uint = 0,heightPadding:uint = 0):void 
     { 
      if ((!dg is DataGrid)) 
       return; 


      var col:uint; 
      var colWidth:uint; 
      var tf:TextFormat; 
      var renderer:UITextField; 
      var widths:Array = new Array(dg.columnCount); 
      var height:uint = 0; 
      var dgCol:Object; 
      var text:uint = 0; 


      if (dg.columnCount > 0 && dg.dataProvider != null) 
      { 
       for (col = 0; col < dg.columnCount; ++col) 
        widths[col] = 0; 
       for each (var item:Object in dg.dataProvider) 
       { 
        for (col = 0; col < dg.columnCount; ++col) 
        { 
         renderer = new DataGridItemRenderer(); 
         dg.addChild(renderer); 
         dgCol = dg.columns[col]; 
         renderer.text = dgCol.itemToLabel(item); 
         widths[col] = Math.max(renderer.measuredWidth, widths[col]); 
         height = Math.max(renderer.measuredHeight, height); 
         dg.removeChild(renderer); 
        } 
       } 


       for (col = 0; col < dg.columnCount; ++col) 
       {      
        dg.addChild(renderer); 
        renderer.text = dg.columns[col].headerText; 
        widths[col] = Math.max(renderer.measuredWidth,widths[col]); 
        dg.removeChild(renderer); 

        text = widths[col]; 
        dg.columns[col].width = text + widthPadding; 
       } 
       if (height != 0) 
        dg.rowHeight = height + heightPadding; 

      } 
     } 
    ]]> 
</mx:Script> 


<mx:DataGrid id="myADG" 
     dataProvider="{dpFlat}" rowCount="{dpFlat.length}" sortableColumns="false">  
     <mx:columns> 
      <mx:DataGridColumn dataField="Region" />    
      <mx:DataGridColumn dataField="Territory_Rep" headerText="Territory Rep" /> 
      <mx:DataGridColumn dataField="Territory" /> 
      <mx:DataGridColumn dataField="Actual" /> 
      <mx:DataGridColumn dataField="Estimate" /> 
     </mx:columns> 

+0

あなたが何を求めているのかは分かりません。 – JeffryHouser

答えて

1

somtimesは、それがhorizo​​ntalScrollPolicyプロパティによって上書きされるので、列幅を制御することは困難です。それは嫌なことによって消えます。ですから、私はcolumnの幅を割り当てる前にhorizo​​ntalScrollPolicyをonにすることでこれを解決しました。その後、この問題を解決するためにhorizo​​ntalScrollPolicyプロパティをoffにリセットしました。

関連する問題