Flex checkbox itemrenderer в таблице данных - PullRequest
0 голосов
/ 16 декабря 2011

в моем гибком приложении я использую сетку данных, которая имеет три столбца первый столбец для галочки как itemRenderer и два других столбца доступны для редактирования.

мое требование

Теперь, когда я получу некоторые данные из БД, данные будут заполнены в таблице данных,

1.после заполнения данных первый столбец должен быть отключен во всех строках 2.Если я щелкаю второй или третий столбец в строке для редактирования ... флажок в первом столбце соответствующей строки должен быть включен, и флажок должен быть готов к проверке и снятию флажка.

как я могу это сделать вот мой код

<mx:DataGrid x="46" y="135" dataProvider="{DetailsProvider}" width="836" height="349">
    <mx:columns>
        <mx:DataGridColumn headerText="Select" dataField="isSelect" itemRenderer="com.components.checkbox"/>
        <mx:DataGridColumn headerText="First Name" dataField="fname"/>
        <mx:DataGridColumn headerText="Second Name" dataField="sname"/></mx:columns></mx:DataGrid>

Надеюсь, этих подробностей достаточно, чтобы понять мой вопрос Любая идея для этого .. Заранее спасибо ..

Ответы [ 2 ]

1 голос
/ 17 декабря 2011

Я предоставляю вам созданный мной пример кода, который использует ItemRenderer и ItemEditor в одной DataGrid, вам просто нужно создать новый компонент mxml с именами d ComNS и ComCB. Просто создайте, что я даю вам пример кода.

Код для основного приложения mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" horizontalAlign="center" 
verticalAlign="middle" height="100%" width="100%">

<mx:Script>
    <![CDATA[
        public var arr:Array = new Array({isSelected:true,label:'ABC',score:'78',name:'ABC'},
                                         {isSelected:true,label:'DEF',score:'50',name:'DEF'},
                                         {isSelected:false,label:'GHI',score:'70',name:'GHI'},
                                         {isSelected:false,label:'JKL',score:'80',name:'JKL'},
                                         {isSelected:true,label:'TRE',score:'50',name:'MNO'});

        public function dgCLG_dataChange():void
        {

        }

        public function dgCLG_change():void
        {

        }

        public function btnSubmit_click():void
        {
            dgCopy.dataProvider = dgCLG.dataProvider;
        }

    ]]>
</mx:Script>

<mx:VBox height="100%" width="100%" horizontalAlign="center" verticalAlign="middle">
    <mx:DataGrid id="dgCLG" dataProvider="{arr}" editable="true" dataChange="{dgCLG_dataChange();}" change="{dgCLG_change();}">
        <mx:columns>
            <mx:DataGridColumn headerText="" dataField="isSelected">
                <mx:itemRenderer>
                    <mx:Component>
                        <mx:Box horizontalAlign="center" verticalAlign="middle" height="100%" width="100%">
                            <mx:Script>
                                <![CDATA[
                                    override public function set data(value:Object):void
                                    {
                                        if(value != null)
                                        {
                                            super.data = value;
                                            var temp:Object = value as Object;
                                            chb.selected = temp.isSelected;
                                        }
                                    }
                                ]]>
                            </mx:Script>
                            <mx:CheckBox id="chb"/>
                        </mx:Box>
                    </mx:Component>                     
                </mx:itemRenderer>
            </mx:DataGridColumn>
            <mx:DataGridColumn headerText="Label" dataField="label" editable="false">

            </mx:DataGridColumn>
            <mx:DataGridColumn headerText="Marks" dataField="score" editable="true" itemEditor="ComNS" editorDataField="value">

            </mx:DataGridColumn>
            <mx:DataGridColumn dataField="name" headerText="Person" itemEditor="ComCB" editorDataField="value" editable="true">

            </mx:DataGridColumn>
        </mx:columns>
    </mx:DataGrid>  

    <mx:Button id="btnSubmit" label="Click" click="{btnSubmit_click();}" />

    <mx:DataGrid id="dgCopy" editable="false">
        <mx:columns>
            <mx:DataGridColumn headerText="CopyLabel" dataField="label" />
            <mx:DataGridColumn headerText="CopyMarks" dataField="score" />
            <mx:DataGridColumn headerText="CopyPerson" dataField="name" />
        </mx:columns>
    </mx:DataGrid>
</mx:VBox>

</mx:Application>

Код для ComNS.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:NumericStepper xmlns:mx="http://www.adobe.com/2006/mxml" minimum="0" maximum="100">

</mx:NumericStepper>

Код для ComCB.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml" dataProvider="{arr}" selectedIndex="1" creationComplete="{c_complete();}" >
<mx:Script>
    <![CDATA[
        public var arr:Array = new Array({label:'ABC'},{label:'DEF'},{label:'GHI'},{label:'JKL'},{label:'MNO'})

        public function c_complete():void
        {
            for(var i:int = 0; i < arr.length; i++)
            {
                if(arr[i].label == parentDocument.dgCLG.selectedItem.name)
                {
                    this.selectedItem = arr[i];
                }
            }   
        }
    ]]>
</mx:Script>
</mx:ComboBox>

Если какой-либо запрос просто прокомментируйте мой ответ ....

0 голосов
/ 17 декабря 2011

Если вы реализуете IDropInListItemRenderer, вашему средству визуализации будет передан объект BaseListData, который, помимо прочего, будет содержать ссылку на DataGrid.С помощью этой ссылки на DataGrid вы можете сравнить его selectedItem с объектом данных для этого средства визуализации, чтобы включить или отключить флажок.

Обратите внимание, что флажок должен уже реализовывать этот интерфейс, поэтому в теории вы должны простобыть в состоянии использовать это с парой настроек.Тем не менее, он не реализован должным образом Adobe.Посмотрите комментарии к этой странице в онлайн-справке, чтобы узнать, как это исправить http://livedocs.adobe.com/flex/3/html/help.html?content=celleditor_4.html.

...