PDA

Просмотр полной версии : Метод set data пользовательского itemRenderer AdvancedDataGridColumnGroup


zorexundra
30.11.2011, 17:38
Здравствуйте!
Подскажите, пожалуйста!
Есть пользовательский itemRenderer AdvancedDataGridColumnGroup.
Я перезаписываю метод set data(value:Object).
Мне нужно получить значение этой конкретной ячейки, но value заключает в себя значения всех ячеек в строке, а значение ячейки AdvancedDataGridColumnGroup сложносоставное, тобишь:
value = {par1:"", par2:{e111:{p1:"Нужное значение"}}};
Как мне получить нужное значение?
Есть-ли возможность выйти на значение через свойство dataField?

Вот проблемный код, простите за пространность (суть вопроса в комментариях кода):
var column1:AdvancedDataGridColumn = new AdvancedDataGridColumn();
column1.dataField = "par1";
var groupColumnviewDG:AdvancedDataGridColumnGroup = new AdvancedDataGridColumnGroup();
groupColumnviewDG.dataField = "par2";
for each(var element:Object in newAr[0].group){
var newDGColumn:AdvancedDataGridColumnGroup = new AdvancedDataGridColumnGroup();
newDGColumn.dataField = "e"+element.ID; // глубины newAr[0].group я не знаю
var newGroupColumn1:AdvancedDataGridColumn = new AdvancedDataGridColumn();
newGroupColumn1.dataField = "p1";
newGroupColumn1.itemRenderer = new ClassFactory(ItemRendDiscNazva); // вот этот itemRenderer должен знать о своём значении
var newGroupColumn2:AdvancedDataGridColumn = new AdvancedDataGridColumn();
newGroupColumn2.dataField = "p2";
var newGroupColumn3:AdvancedDataGridColumn = new AdvancedDataGridColumn();

newDGColumn.children.push(newGroupColumn1, newGroupColumn2);
groupColumnviewDG.children.push(newDGColumn);
}
viewDG.groupedColumns = new Array(column1, groupColumnviewDG);
viewDG.dataProvider = newAr;

scarbo
01.12.2011, 00:20
В Flex3 itemRenderer надо было имплементить от mx.controls.listClasses.IDropInListItemRenderer, через метод listData устанавливать _dataField. Типа:

[Bindable("dataChange")]
public function get listData():BaseListData
{
return _listData;
}
public function set listData(value:BaseListData):void
{
_listData = value;
_dataGrid = value.owner as DataGrid;
_dataField = (value as DataGridListData).dataField;
}

override public function set data(value:Object):void
{
super.data = value;
trace(value[_dataField]);
}

Из твоего примера не понятно, для Flex4 это или для Flex3

Добавлено через 1 минуту
P.S. для AdvancedDataGrid посмотри доки, может там немножко по другому.

zorexundra
01.12.2011, 15:11
scarbo, речь идёт о mx.controls.AdvancedDataGrid. Доки таких деталей не освещают.

Суть моей проблемы:
Я могу обратиться через параметр value метода set data() к поставщику данных:
value.Колонка1.Колонка1_2.Колонка1_2_1, но я не знаю количество колонок Колонка1_..., и мне требуется, чтобы мой itemRenderer Колонка1_?_1 сам узнал к какой колонке он относится (символ ?) и сам выявил собственное значение, которое отображается в некастомизированной ячейке.

Добавлено через 1 час 53 минуты
И ещё:
мой itemRenderer наследуется от mx.containers.Canvas.

GBee
01.12.2011, 20:21
Может расскажите, что вы хотите в итоге? По клику получать значение ячейки или что?

zorexundra
02.12.2011, 11:33
GBee, мне нужно реализовать алгоритм:
Если значение ячейки = 1, то отобразить в ячейке - 2.

GBee
02.12.2011, 11:58
Тогда вы думаете не в том направлении, забудьте про UI бегайте по вашему массиву и меняйте что вам надо, потом отдавайте таблице.

zorexundra
02.12.2011, 12:27
GBee, ИМХО, не лучший способ. Думаю ячейка сама должна себя представлять.

Моя проблема в том, что имея поставщик данных и не зная его структуры, я не могу получить значение конкретной ячейки, хотя сам AdvancedDataGrid прекрасно с этой задачей справляется.
Всё что мне удалось на этот момент, это в itemRenderer, наследуемом от AdvancedDataGridGroupItemRenderer выудить значение через label.text, но из-за того, что это значение зависит от визуализации компонента, я не могу его использовать. :(

GBee
02.12.2011, 15:39
http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/mx/controls/listClasses/AdvancedListBase.html#labelFunction

myLabelFunction(item:Object, column:DataGridColumn):String
{
if(item[column.dateField]==1)
return "2";
return item[column.dateField];
}

zorexundra
02.12.2011, 17:58
GBee, в моём случае значение окажется undefined.
Моя ячейка выглядит так: item[другая_column.dateField][неизвестная_column.dateField][column.dateField]