Показать сообщение отдельно
Старый 07.04.2013, 00:01
Александр Мостовой вне форума Посмотреть профиль Отправить личное сообщение для Александр Мостовой Посетить домашнюю страницу Александр Мостовой Найти все сообщения от Александр Мостовой
  № 2  
Ответить с цитированием
Александр Мостовой
 
Аватар для Александр Мостовой

Регистрация: Sep 2001
Адрес: Харьков
Сообщений: 305
Отправить сообщение для Александр Мостовой с помощью ICQ Отправить сообщение для Александр Мостовой с помощью Skype™
В обрабочике вы получаете анонимный объект который сами задавали в addItem. В вашем случае имена свойств этого объекта имеют киррилические названия. Вы можете обращаться к ним через квадратные скобки.
Код AS3:
raboti.addItem({id:i, Работы:"", Цена:st.text, Норма:nor, Сумма:drabotig, Исполнитель:""});
Хотя AS3 допускает кирилические символы в переменных. И эта запись идентична
Код AS3:
var myObject:Object = new Object();
myObject.id = i;
myObject.Цена = st.text;
myObject.Норма = nor;
...
 
raboti.addItem(myObject);
Соответстенно обратиться к полученному объекту вы можете как при обычной работе с объектом-ассоциативным массивом:
Код AS3:
function onItemEditEnd(e:DataGridEvent):void
{
	var cellEditor:DataGridCellEditor = raboti.itemEditorInstance as DataGridCellEditor;
	var data:Object = cellEditor.data; // или через listData таким же оразом для колонки
	data["Сумма"] = data["Работы"] + data["Цена"] + data["Норма"] + data["Исполнитель"]; //или data.Cумма = data.Работы ...
 
 
}
Цитата:
пока реализовано со всех, не могу понять как обратиться к определенной ячейке
Логика работы с DataGrid не совсем такая как могли привыкнуть при работе с таблицами в Exel, например.
Подсчет значений необходимо производить в модели данных, а не по индексу ячеек, которые в нем не задуманы для использования как порядковый номер.

Для повышения производительности DataGrid (точнее его составные элементы List) построен так, что ячейки в нем не пересоздаются при изменении данных, а постоянно отрисованы на экране в и CellRendrer ( класс отрисовки ячеек) приходят ссылки на текущую модель данных.

Лучше всего отнаследоваться от CellRendrer и в сеттере data вставить свой обработчик на поступление данных

Код AS3:
		override public function set data(value:Object):void 
		{			
			if (value != _data) //Ячейка получила ссылку на новый объект модели данных, напрмер при пересортировке.
			{
               var dataRow:ModelRow = value as ModelRow ; //ModelRow - это тот же объект item в вашем примере, но типихированный
				//Отписываемся / подписываемся на событие обновления данных. Пишем прочую логику.
 
			}			
		}
Такая логика позволяет DataGrid отображать огромное количество зписий в компоненте, т.к. фактически визуально представлены лишь те ячейки которые отображены сейчас на экране, те что за прокрутками не отрисовываются.


Объект модели данных приходящий в поле data представляет из себя всю строрку. Узнать какая ячейка сечас текущая для этого элемента (то есть имя текущей колонки) можно из сеттера CellRendrer ListData
Код AS3:
override public function set listData(value:ListData):void
Так сделано потому что у DataGrid могут быть горизонтальные прокрутки, поэтому ячейка не знает какакая колонка к ней поподет после прокрутки. Т.е. прокрутив скрол вправо в эту же ячейку вместо поля "id" придет поле "Сумма"

Добавлено через 46 минут
В общем я немного запутанно объяснил, если кратко то:
Вместо анонимного объекта,
Код AS3:
{id:i, Работы:"", Цена:st.text, Норма:nor, Сумма:drabotig, Исполнитель:""}
созадете экземпляр совего класса и внем высчитываете все значения
Код AS3:
raboti.addItem(new ModelRow(id, "", sr.text, nor, Сумма:drabotig, "");
В свойство колонки передаете конструктор наследник CellRenderer отрисовывающий ячейку
Код AS3:
var dataGridColumn:DataGridColumn = new DataGridColumn("id");
 dataGridColumn.cellRenderer = MyClassCellRenderer
__________________
...


Последний раз редактировалось Александр Мостовой; 07.04.2013 в 07:30.