2011-01-04 2 views
0

Im folgenden Beispiel habe ich die OptimizeDataGrid-Methode für Button Click-Ereignis aufgerufen, um die Größe der Spalte entsprechend den Daten zu ändern. während beim ersten Mal des Button-Click-Ereignisses die Funktion aufgerufen wurde, während die Datagrdi-Spaltenbreite allein nicht richtig eingestellt ist. In der zweiten Zeit funktioniert sie ordnungsgemäß.DataGrid-Spaltenbreite ist nicht richtig festgelegt

Für zB: In der folgenden Anweisung kommt der Text Wert als 55 und WidthPadding wird als 25. kommt aber die Summe dieser beiden Wert ist nicht in der dg.columns [col] .width.

d.g.columns [col] .width = Text + widthPadding;

Aber das selbe arbeitet an der zweiten Zeit des Knopfklickereignisses. hilft mir, dieses Problem zu lösen. Danke im Voraus.

<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

Ich bin nicht wirklich sicher, was Sie fragen. – JeffryHouser

Antwort

1

Es ist schwer, die Spaltenbreite zu steuern, da die somtimes es durch die horizontalScrollPolicy- Eigenschaft außer Kraft gesetzt wird. Durch Gehörlosigkeit wird es aus sein. Also habe ich das gelöst, indem ich die horizontalScrollPolicy mit on gemacht habe, bevor ich die Breite der Spalte zugewiesen habe. Danach habe ich die Eigenschaft horizontalScrollPolicy mit off wieder zurückgesetzt, um dieses Problem zu lösen.