Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Копирование экземпляра класса DataGridColumn (http://www.flasher.ru/forum/showthread.php?t=155914)

AntonSurkont 12.05.2011 16:37

Копирование экземпляра класса DataGridColumn
 
Здравствуйте уважаемые программисты.
Подскажите плиз как скопировать экземпляр класса DataGridColumn.
Так не подходит
Код AS3:

var arr1:Array = new Array();
var m:int = dataGrid.columns.length;
for (var j:int = 0; j < m; j++)
{
        arr1.push(new DataGridColumn(dataGrid.columns[j].dataField));
}
dg.columns = arr1;

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

Так тоже не работает
Код AS3:

registerClassAlias ("copiedColumn", DataGridColumn);
var tempCols:Array = [];
for each(var col:DataGridColumn in dataGrid.columns)
{
        var buffer:ByteArray = new ByteArray();
        buffer.writeObject(col);
        buffer.position = 0;
 
        tempCols.push(buffer.readObject() as DataGridColumn);
}
 
dg.columns = tempCols;


Волгоградец 13.05.2011 11:29

Никак. Отнаследоваться от DataGridColumn, прописать ему метод clone() и и в нем отдавать все что нужно.

AntonSurkont 13.05.2011 11:55

Скажите плиз что нужно прописать в DataGridColumn чтобы при изменении его рендерера менялось значение dataProvider самого DataGrid-а?

Волгоградец 13.05.2011 13:44

Не понял вопроса. Какой конечный результат хочешь получить?

AntonSurkont 13.05.2011 16:54

Вот такой датаГрид
Код AS3:

<mx:DataGrid id="itemDG" dataProvider="{itemAC}" width="100%" height="100%">
<mx:columns>
        <mx:DataGridColumn dataField="name" headerText="Item" />
        <mx:DataGridColumn dataField="quantity" headerText="Quantity" width="100" minWidth="70" rendererIsEditor="true"  editorDataField="result" itemRenderer="renderer.QuantityRenderer"/>
        <mx:DataGridColumn dataField="color" headerText="Color" width="80" rendererIsEditor="true"  editorDataField="result" itemRenderer="renderer.ColorPickerRenderer"/>
        <mx:DataGridColumn dataField="size" headerText="Size" width="140" minWidth="130" rendererIsEditor="true"
editorDataField="result" itemRenderer="renderer.SizeRenderer"/>
        <mx:DataGridColumn dataField="hasLogo" headerText="Logo?" width="100" rendererIsEditor="true" editorDataField="result"
itemRenderer="renderer.CheckRenderer"/>
</mx:columns>
</mx:DataGrid>

Такой датаПровайдер (ну я его там загружаю, просто чтобы структура была понятна)
Код:

<?xml version="1.0" encoding="UTF-8"?>
<items>
        <item name="Item 1" quantity="2" color="sky" size="small" hasLogo="true" />
        <item name="Item 2" quantity="4" color="red" size="medium" hasLogo="false" />
        <item name="Item 3" quantity="2" color="ash" size="large" hasLogo="true" />
        <item name="Item 4" quantity="1" color="navy" size="extra-large" hasLogo="false" />
</items>

Так вот когда скажем я меняю состояние чекБокса в последней колонке (renderer.CheckRenderer), то нужно чтобы и параметр hasLogo для этой записи тоже поменялся

Добавлено через 7 минут
Пока сделал так и все работает:
CheckRenderer.mxml
Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" horizontalAlign="center">
        <mx:Script>
                <![CDATA[
                        public var result:Boolean = false;
 
                        private function updateHandler():void
                        {
                                data.hasLogo = editor.selected;
                                result = editor.selected;
                        }
                ]]>
        </mx:Script>
        <mx:CheckBox id="editor" selected="{data.hasLogo}" click="updateHandler()"/>
</mx:VBox>

Но очень странно что без строчки data.hasLogo = editor.selected; ничего не работает. Вроде бы все должно было работать и так, потому что
Код AS3:

mx:DataGridColumn dataField="hasLogo" headerText="Logo?" width="100" rendererIsEditor="true" editorDataField="result" itemRenderer="renderer.CheckRenderer"/>

и result меняю как надо, непонятно.


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

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