actionscript 3 - داتاغريد إيتمندرندر الحصول على القضية أثناء التمرير




actionscript-3 flex (2)

أنا باستخدام زر الراديو داخل شرارة داتاغريد على النحو التالي.

<s:DataGrid dataProvider="{arrList}" >
<s:columns>
<mx:ArrayList>
<mx:source>
    <s:GridColumn width="90" headerText="radio">
     <s:itemRenderer >
     <fx:Component>
        <s:GridItemRenderer>
                <fx:Script>
                <![CDATA[
                    override public function set data( value:Object ) : void 
                    {
                        super.data = value;
                        rdId.group=outerDocument.rbgGroup;
                    }
                ]]>
                </fx:Script>
          <s:RadioButton id="rdId" />
        </s:GridItemRenderer>
        </fx:Component>
        </s:itemRenderer>
    </s:GridColumn>

     <s:GridColumn headerText="Name" dataField="name" />
    </mx:source>
  </mx:ArrayList>
</s:columns>
</s:DataGrid>

لقد أنشأت مجموعة ل راديوبوتون كما أريد أي واحد من المحدد.

<s:RadioButtonGroup id="rbgGroup" />

هذا العمل بشكل جيد. ولكن، إذا اخترت أي راديو مثل الأولى والتمرير ثم فإنه سيتم تحديد زر الاختيار آخر تلقائيا وأول مختارة إزالتها.

لقد فحصت العديد من وظيفة أخرى مثل هذا ولكن هذا لا يبدو العمل.

حدثت المشكلة فقط عند التمرير.
أي مساعدة سيكون موضع تقدير كبير.


أكثر من المرجح أن هذا له علاقة مع التخطيط الظاهري.

الظاهري وغير الظاهري:

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

للأسف لا يمكنك تغيير هذا بسهولة ل داتاغريدس. الحل المشترك هو تخزين حالة التحديد في البيانات وعلى البيانات المحددة التي تجاوزت بالفعل أيضا تعيين حالة التحديد استنادا إلى البيانات.

لكل طلب في التعليق نموذج التعليمات البرمجية:

 <s:GridItemRenderer>
     <fx:Script>
          <![CDATA[
                override public function set data( value:Object ) : void 
                {
                    super.data = value;
                    rdId.group=outerDocument.rbgGroup;

                    //just like you are setting the group, mark it as selected based on the data. 
                    //Update your data when it becomes selected.
                    rdId.selected = value.selected;
                }

                protected function rb_clickHandler(event:Event):void {
                    data.selected = rbId.selected;
                }
            ]]>
            </fx:Script>
      <s:RadioButton id="rdId" change="rdId_clickHandler(event)"/>
    </s:GridItemRenderer>

لقد فعلت ذلك على النحو التالي. صنع selected = false للجميع وجعل مختارة التي يتم تغييرها.

<s:GridItemRenderer>
    <fx:Script>
        <![CDATA[
            import spark.components.RadioButtonGroup;

            [Bindable]
            private static var rbgGroup:RadioButtonGroup = new RadioButtonGroup();


            override public function set data( value:Object ) : void 
            {
                super.data = value;
            }

            protected function rdId_changeHandler(event:Event):void {

                if(outerDocument.arrList != null)
                {
                    for each(var obj:Object in outerDocument.arrList)
                    {
                        obj.selected = false;
                    }
                }

                data.selected=true;
            }

        ]]>
    </fx:Script>
    <s:RadioButton id="rdId" group="{pndcGroup}" selected="{data.selected}" change="rdId_changeHandler(event)" />
</s:GridItemRenderer>

نأمل أن تساعد بعض واحد.