![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2013
Сообщений: 4
|
Задача считать значения из одной ячейки.... Норма.... пока реализовано со всех, не могу понять как обратиться к определенной ячейке
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); } } |
|
|||||
|
В обрабочике вы получаете анонимный объект который сами задавали в addItem. В вашем случае имена свойств этого объекта имеют киррилические названия. Вы можете обращаться к ним через квадратные скобки.
raboti.addItem({id:i, Работы:"", Цена:st.text, Норма:nor, Сумма:drabotig, Исполнитель:""}); var myObject:Object = new Object(); myObject.id = i; myObject.Цена = st.text; myObject.Норма = nor; ... raboti.addItem(myObject); 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 (точнее его составные элементы List) построен так, что ячейки в нем не пересоздаются при изменении данных, а постоянно отрисованы на экране в и CellRendrer ( класс отрисовки ячеек) приходят ссылки на текущую модель данных. Лучше всего отнаследоваться от CellRendrer и в сеттере data вставить свой обработчик на поступление данных override public function set data(value:Object):void { if (value != _data) //Ячейка получила ссылку на новый объект модели данных, напрмер при пересортировке. { var dataRow:ModelRow = value as ModelRow ; //ModelRow - это тот же объект item в вашем примере, но типихированный //Отписываемся / подписываемся на событие обновления данных. Пишем прочую логику. } } Объект модели данных приходящий в поле data представляет из себя всю строрку. Узнать какая ячейка сечас текущая для этого элемента (то есть имя текущей колонки) можно из сеттера CellRendrer ListData Так сделано потому что у DataGrid могут быть горизонтальные прокрутки, поэтому ячейка не знает какакая колонка к ней поподет после прокрутки. Т.е. прокрутив скрол вправо в эту же ячейку вместо поля "id" придет поле "Сумма" Добавлено через 46 минут В общем я немного запутанно объяснил, если кратко то: Вместо анонимного объекта, созадете экземпляр совего класса и внем высчитываете все значения В свойство колонки передаете конструктор наследник CellRenderer отрисовывающий ячейку
__________________
... Последний раз редактировалось Александр Мостовой; 07.04.2013 в 07:30. |
|
|||||
|
Регистрация: Apr 2013
Сообщений: 4
|
Спасибо за такое подробное описание ....решил проблему на половину а именно , все вродебы нормально но при редактирование ячеек выдает вот такую вот ошибку
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() 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; } сделал : |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:37. |
|
|
« Предыдущая тема | Следующая тема » |
|
|