Ширина столбца DataGrid установлена ​​неправильно - PullRequest
0 голосов
/ 04 января 2011

В приведенном ниже примере я вызвал метод OptimizeDataGrid для события нажатия кнопки, чтобы изменить размер столбца в соответствии с данными.тогда как в первый раз события нажатия кнопки он вызвал функцию, тогда как ширина столбца Datagrdi не установлена ​​должным образом. в то время как во второй раз он работает должным образом.

Для Например: в приведенном ниже выражении текстовое значениеприходит как 55, а widthPadding - как 25. но сумма этих двух значений не указана в dg.columns [col] .width.

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

Но то же самое работает и во второй раз события нажатия кнопки.Любая помощь мне решить эту проблему.Заранее спасибо.

<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>

1 Ответ

1 голос
/ 05 января 2011

Трудно контролировать ширину столбца, потому что иногда он переопределяется свойством horizontalScrollPolicy. По умолчанию это будет выключено. Таким образом, я решил эту проблему, включив HorizontalScrollPolicy с включенным до назначения ширины столбца. после этого я еще раз сбросил свойство horizontalScrollPolicy с параметром off, чтобы решить эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...