Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.04.2013, 20:00
arahmanov вне форума Посмотреть профиль Отправить личное сообщение для arahmanov Найти все сообщения от arahmanov
  № 1  
Ответить с цитированием
arahmanov

Регистрация: Apr 2013
Сообщений: 4
По умолчанию Datagrid сумма ячеек

Задача считать значения из одной ячейки.... Норма.... пока реализовано со всех, не могу понять как обратиться к определенной ячейке

Код AS3:
raboti.columns = ["id","Работы","Цена","Норма","Сумма","Исполнитель" ,"удалить" ]
 
btnadd.addEventListener(MouseEvent.CLICK, addstroka);
 
function addstroka(event:Event):void
{
 
raboti.editable = true;
var i = raboti.length;
var kkk =st.text;
i++;
 
var nor = null;
import fl.events.DataGridEvent;
import fl.data.DataProvider;
import fl.controls.DataGrid;
import fl.controls.dataGridClasses.DataGridCellEditor;
import fl.controls.listClasses.ListData;
import fl.events.DataGridEvent;
var drabotig = null;
 
 
    raboti.addItem({id:i, Работы:"", Цена:st.text, Норма:nor, Сумма:drabotig, Исполнитель:""});
 
raboti.addEventListener(DataGridEvent.ITEM_EDIT_END,onItemEditEnd);
function onItemEditEnd(e:DataGridEvent):void {
    var cellEditor:DataGridCellEditor = raboti.itemEditorInstance as DataGridCellEditor;
    var listData:ListData = cellEditor.listData;
    trace("After Edit: " + cellEditor.text);
}
}

Старый 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.
Старый 07.04.2013, 21:00
arahmanov вне форума Посмотреть профиль Отправить личное сообщение для arahmanov Найти все сообщения от arahmanov
  № 3  
Ответить с цитированием
arahmanov

Регистрация: Apr 2013
Сообщений: 4
Спасибо за такое подробное описание ....решил проблему на половину а именно , все вродебы нормально но при редактирование ячеек выдает вот такую вот ошибку


Код AS3:
ReferenceError: Error #1069: Property selectedItem not found on fl.controls.dataGridClasses.DataGridCellEditor and there is no default value.
	at baza_fla::MainTimeline/gridItemClick()[baza_fla.MainTimeline::frame4:85]
	at flash.events::EventDispatcher/dispatchEventFunction()
	at flash.events::EventDispatcher/dispatchEvent()
	at fl.controls::TextInput/handleChange()

Код AS3:
raboti.columns = ["id","Работы","Цена","Норма","Сумма","Исполнитель" ,"удалить" ]
 
btnadd.addEventListener(MouseEvent.CLICK, addstroka);
 
function addstroka(event:Event):void
{
 
 
 
 
raboti.editable = true;
var i = raboti.length;
var kkk =st.text;
i++;
var myObject:Object = new Object();
myObject.id = i;
myObject.Цена = st.text;
myObject.Норма = "";
myObject.Сумма = "";
myObject.Исполнитель = "";
 
raboti.addItem(myObject);
 
}
 
 
 
 
 
raboti.addEventListener(Event.CHANGE, gridItemClick);
 
function gridItemClick (event:Event):void {
	var cena =event.target.selectedItem.Цена;
	var norma =event.target.selectedItem.Норма;
	var summ = cena * norma;
	trace (cena);
	trace (norma);
	trace (summ);
	//var rur = event.target.selectedItem.Сумма = summ;
 
}
Добавлено через 21 час 9 минут
сделал :
Код AS3:
function gridItemClick (event:Event):void {
var rur = event.target.selectedItem.сумма =event.target.selectedItem.цена * event.target.selectedItem.норма;
}

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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