Flex CheckBox в Datagrid

голоса
3
В followin гибкого Кода: 
Также можно просмотреть по адресу: http://www.cse.epicenterlabs.com/checkBoxDg/checkBoxDg.html
1. Добавьте строку в DataGrid, нажав на «AddRow»
2. Нажмите на кнопку «CheckDg», чтобы увидеть значение всех флажков
     - она ​​показывает «checkBox57» или «checkBox64» или какой-либо аналогичной строки
3. Теперь, «выберите» флажок в первой строке.
4. Снова нажмите на «CheckDg»
    -это шоу «правда»

Таким образом, первоначально dp.getItemAt (я) .date возвращает CheckBox
а затем возвращает «выбранный» значение CheckBox?
Почему эта разница?
<?xml version=1.0 encoding=utf-8?>
<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml layout=absolute viewSourceURL=srcview/index.html>
        <mx:Canvas>
        <mx:DataGrid x=69 y=119 id=dgFee editable=true dataProvider={dp}>
            <mx:columns>
            <mx:DataGridColumn headerText=Date dataField=date width=100 editable=true 
            editorDataField=selected rendererIsEditor=true>
            <mx:itemRenderer>
                <mx:Component>
                    <mx:CheckBox selected=false>
                                       </mx:CheckBox>
                        </mx:Component>
            </mx:itemRenderer>
            </mx:DataGridColumn>
                       <mx:DataGridColumn dataField=amount headerText=Amount editable=true>
                         <mx:itemEditor>
                         <mx:Component>
                                  <mx:TextInput restrict=0-9/>
                         </mx:Component>
                         </mx:itemEditor>   
                       </mx:DataGridColumn>
            </mx:columns>
        </mx:DataGrid>
        <mx:CheckBox x=130 y=54 label=Checkbox selected=true click=Alert.show(abc.selected.toString()) id=abc/>
<mx:Script>
    <![CDATA[
        import mx.controls.CheckBox;
        import mx.collections.ArrayCollection;
        import mx.controls.Alert;
        public var dp:ArrayCollection = new ArrayCollection();
        public function addRow():void
        {
          var tmp:Object = new Object();
          tmp['amount'] = 100;
          tmp['date'] = new CheckBox();
          dp.addItem(tmp);
        }
        public function delRow():void
        {
            if(dgFee.selectedIndex != -1)
            dp.removeItemAt(dgFee.selectedIndex);
        }

        public function loop1():void
        {
            for(var i:int=0;i<dp.length;i++)
            {
               Alert.show(dp.getItemAt(i).date);
            }
        }
    ]]>
</mx:Script>
                <mx:Button x=29 y=89 label=AddRow click=addRow()/>
                <mx:Button x=107 y=89 label=DelRow click=delRow()/>
                <mx:Button x=184 y=89 label=CheckDg click=loop1()/>

</mx:Canvas>    
</mx:Application>
Задан 13/07/2009 в 18:13
источник пользователем
На других языках...                            


3 ответов

голоса
0

При нажатии на флажок в сетке, он пишет: «истина» или «ложь» в поле даты, заменяя исходный объект CheckBox, который был там. Я считаю, что itemEditors (вы используете рендеринг в качестве редактора) делаете это они пишут .data свойства из соответствующих компонентов в коллекцию.

Ответил 13/07/2009 в 19:03
источник пользователем

голоса
3

Вы не должны присвоить объекты переменных данных, но данные. Checkbox.select свойство устанавливается на Ваш объект флажков первым, а затем истинным или ложным после предыдущих действий. Попробуйте это вместо

public function addRow():void
{
  var tmp:Object = new Object();
  tmp['amount'] = 100;
  tmp['date'] = false; // not new CheckBox();
  dp.addItem(tmp);
}

PS: Также дп ​​следует отнести с [Bindable] :-)

Ответил 12/04/2010 в 16:27
источник пользователем

голоса
0

Установите свойство для конкретного столбца DataGrid как ложь «редактируемого». Это позволит решить проблему

Ответил 25/10/2013 в 20:23
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more