Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Копирование колонок из одного DataGrid в другой (http://www.flasher.ru/forum/showthread.php?t=155855)

AntonSurkont 11.05.2011 17:35

Копирование колонок из одного DataGrid в другой
 
Хочу скопировать колонки из одного ДатаГрида в другой. Открыл справку от адоба посмотреть свойство columns, а там:
Для изменения установок для столбцов следует получить этот массив, выполнить изменения столбцов и порядка столбцов в массиве, а затем присвоить новый массив свойству столбцов. Так происходит потому, что элемент управления DataGrid возвращает новую копию массива столбцов и не учитывает изменения.
Я че-то не догоняю что они хотели сказать. Что собственно нужно сделать?

Волгоградец 11.05.2011 17:53

Это значит что если сделать так
Код AS3:

dg.columns[0].headerText = 'aaa';

то не сработает. Делать нужно так:
Код AS3:

var tempCols:Array = dg.columns;
tempCols[0].headerText = 'aaa';
dg.columns = tempCols;

Для того что ты хочешь сделать - так же.

AntonSurkont 11.05.2011 17:58

dataGrid - тот чьи колонки я хочу скопировать
dg - тот кому я хочу вставить скопированные колонки
Делаю так:
Код AS3:

var tempCols:Array = dataGrid.columns;
dg.columns = tempCols;

ничего не получается. К тому же колонки не копируются а получают ссылку.

Волгоградец 11.05.2011 18:04

У dg назначен датапровайдер?

AntonSurkont 11.05.2011 18:09

Назначен

Добавлено через 1 минуту
Я сделал так:
Код AS3:

dg = new DataGrid();
 
var ac:ArrayCollection = new ArrayCollection();
var n:int = dataGrid.dataProvider.length;
for (var i:int = 0; i < n; i++)
{
        ac.addItem(ObjectUtil.copy(Object(dataGrid.dataProvider)[i]));
}
dg.dataProvider = ac;
 
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;

и все аккуратно копируется, и колонки и внутреннее наполнение Датагрида

Волгоградец 11.05.2011 18:26

Да, действительно, одни и те же нельзя использовать в разных датагридах. Как вариант могу предложить:
Код 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;


AntonSurkont 11.05.2011 18:28

Скажите а вашим способом можно весь объект ДатаГрид скопировать?

Волгоградец 11.05.2011 18:38

Нет наверное. Слишком сложный объект который внутри себя держит кучу других объектов.

AntonSurkont 11.05.2011 18:42

Спасибо за то что откликнулись


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

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