سؤال

ولدي صفوف من البيانات النصية التي يمكن أن تختلف بين 0 و 100، وجميعا بحاجة إلى أن تكون مرئية على الشاشة في وقت واحد. السلوك الافتراضي على ما يرام للحصول على الشبكة حتى الصفوف * rowHeight> gridHeight.

وأساسا أنا بحاجة إلى ربط إلى ارتفاع بند، أو ارتفاع الصف لحساب ذلك على أساس ارتفاع الشبكة. لقد حدد paddingTop وpaddingBottom إلى الصفر، ولكن لا يزال هناك قدر كبير من المساحة البيضاء بين الصفوف.

وبلدي مكون datagrid ...

<mx:DataGrid xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="OnCreationComplete()"
paddingTop="0"
paddingBottom="0"
>

<mx:Script>
    <![CDATA[

    private function OnCreationComplete():void
    {
        //setRowHeight(10);
    }

    override protected function setRowHeight(v:Number):void
    {
        super.setRowHeight(v);
    }

    ]]>
</mx:Script>

</mx:DataGrid>

وsetRowHeight () يساعد، ولكن itemRender للخلية أكبر من الخلية، إذا قمت بتعيين ارتفاع الصف إلى شيء من هذا القبيل 10.

هل كانت مفيدة؟

المحلول 2

وشكرا inferis، التي ساعدتني كثيرا. هذا هو بلدي مكون شبكة النهائي. ليست حقا بذاته ذلك بسبب دعوة بعض الرافضة، ولكن إذا كان ذلك يساعد شخص آخر يحصل لهم للعمل، عظيم!

<?xml version="1.0" encoding="utf-8"?>
<mx:DataGrid xmlns:mx="http://www.adobe.com/2006/mxml"
paddingTop="-3"
paddingBottom="-3"
resize="OnResize(event)"
>

<mx:Script>
    <![CDATA[
        import mx.containers.Panel;
    import mx.core.Application;
    import mx.events.ResizeEvent;

    protected function OnResize(event:ResizeEvent):void
    {
        this.invalidateDisplayList();
    }

/**
 *  @private
 *  Sizes and positions the column headers, columns, and items based on the
 *  size of the DataGrid.
 */
override protected function updateDisplayList(unscaledWidth:Number,
                                              unscaledHeight:Number):void
{
    if( this.collection.length > 0 ) // so don't divide by zero
    {
        var appHeight:Number = Application.application.height;
        var appMinusMenuHeight:Number = appHeight - Application.application.hboxPrintBar.height;
        var boxHeight:Number = Application.application.vboxViewAll.height;
        if( boxHeight > 0 )
        {
            var gridHeight:Number = (appMinusMenuHeight - this.headerHeight) * 0.93;
            var calcHeight:Number = gridHeight / this.collection.length;
            var calcHeightFloor:Number = Math.floor( calcHeight );
            setRowHeight( calcHeightFloor );
            //var p:Panel = this.parent as Panel;
            //p.title = calcHeightFloor.toString();
            if( calcHeightFloor <= 10 )
                this.setStyle("fontSize",calcHeightFloor);
        }
    }
    super.updateDisplayList(unscaledWidth,unscaledHeight);
}

    ]]>
</mx:Script>

</mx:DataGrid>

نصائح أخرى

وأنت قد ترغب في النظر في الممتلكات DataGrid.variableRowHeight كما، عندما يتم تعيين هذا إلى كاذبة (الافتراضي) وكافة الصفوف يكون نفس الارتفاع الأكبر itemRenderer. هل يمكن أن ننظر أيضا في كتابة itemRenderer بنفسك لكل DataColumn.

وإذا كان كل ما تريد حقا القيام به هو تعيين ارتفاع الصف على أساس عدد من العناصر في dataProvider الرغم من ذلك، هل يمكن أن مجرد مجموعة الملكية DataGrid.rowHeight مثل هذا (على افتراض الشبكة الخاصة بك وارتفاع ثابت، ويقول 100٪) :

myDataGrid.dataProvider = myArray;
myGrid.rowHeight = Math.floor((myGrid.height - myGrid.headerHeight)/myArray.length);

و(أنا أخذ الكلمة هنا لأنه إذا كنت في نهاية المطاف مع قيمة كسور أن جولات حتى، عليك ان تحصل على شريط التمرير)

والمشكلة الوحيدة مع هذا النهج، وأعتقد أنك قد لاحظت، هو أن itemRenderer قد لا يتم عرض بشكل صحيح في صف واحد وهذا صغير جدا. وأنا أعتقد أن حل هذا عن طريق تغيير الخط داخل العارض على أساس ذروته.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top