Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   CheckBox в DataGrid (http://www.flasher.ru/forum/showthread.php?t=116921)

BeDLiNt 14.10.2008 13:33

CheckBox в DataGrid
 
Использую кастомный итемрендерер для колонки в DataGrid-е RendererDGCheckBox.mxml :
Код:

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="40"
        implements="mx.controls.listClasses.IDropInListItemRenderer">
                <mx:CheckBox verticalCenter="0" horizontalCenter="0" scaleX="2" scaleY="2"
                        selected="{data[DataGridListData(listData).dataField]=='true' ? true:false}"/>
<mx:Script>
        <![CDATA[
                import mx.controls.listClasses.BaseListData;
                import mx.controls.DataGrid;
                import mx.controls.Alert;
               
                import mx.controls.dataGridClasses.DataGridListData;

                private var _listData:BaseListData = null;

                [Bindable(event="dataChange")]
                public function get listData():BaseListData {
                        return _listData;
                }

                public function set listData (value:BaseListData):void {
                        _listData = value;
                }

]]>
</mx:Script>
</mx:Canvas>

Галочки ставятся, однако изменений в провайдере (XMLList) конечно же не происходит. Как грамотнее релизовать это?

sangle 15.10.2008 17:50

Для этих целей рекомендую всегда переопределять свойство data
Код:

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100%">
<mx:Script>
    <![CDATA[
       
    override public function set data(value: Object): void {
        if(value != null) {
            super.data = value;
            checkBox.selected = value.checked;
        }
    }
   
    private function onChange(event: Event): void {
        super.data.checked = checkBox.selected;
    }
       
    ]]>
</mx:Script>
    <mx:CheckBox id="checkBox" change="onChange(event)"/>
</mx:Canvas>


sangle 15.10.2008 18:40

Если же тебе нужно более универсальное решение (в отличие от предыдущего решения, где было известно, что значение хранится в свойстве checked), то вот расширенный пример.
Код:

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas
    xmlns:mx="http://www.adobe.com/2006/mxml"
    implements="mx.controls.listClasses.IDropInListItemRenderer">
<mx:Script>
<![CDATA[
    import mx.controls.dataGridClasses.DataGridListData;
    import mx.controls.listClasses.BaseListData;
   
    override public function set data(value: Object): void {
        if(value != null) {
            super.data = value;
            var fieldName: String = DataGridListData(listData).dataField;
            checkBox.selected = value[fieldName];
        }
    }
   
    private var _listData:BaseListData = null;

    [Bindable(event="dataChange")]
    public function get listData():BaseListData {
        return _listData;
    }
   
    public function set listData (value:BaseListData):void {
        _listData = value;
    }
   
    private function onChange(event: Event): void {
        var fieldName: String = DataGridListData(listData).dataField;
        super.data[fieldName] = checkBox.selected;
    }
]]>
</mx:Script>
    <mx:CheckBox id="checkBox" change="onChange(event)"/>
</mx:Canvas>


BeDLiNt 16.10.2008 11:59

Спасиб. Второе то что нужно. Единственно пришлось заменить
Код:

checkBox.selected = value[fieldName];
на
Код:

value[fieldName]==true ? checkBox.selected=true:checkBox.selected=false;
т.к. в XMLList нет типизации.

sangle 16.10.2008 14:17

А так не читабельнее?
Код:

checkBox.selected = value[fieldName]==true;
А вообще бы я использовал значения 0 и 1. Это очень удобно при передаче данных и позволяет не зависеть от коллекции и способах ее наполнения при передаче данных от внешних источников.


Часовой пояс GMT +4, время: 02:55.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.