Here is my take on what you are trying to do...
Application:
<?xml version="1.0" encoding="utf-8"?>
<Application xmlns="http://www.adobe.com/2006/mxml"
creationComplete="cc()" layout="horizontal">
<Script>
<![CDATA[
import mx.events.ListEvent;
import mx.collections.ArrayCollection;
[Bindable] public var d:ArrayCollection = new ArrayCollection([]);
private const ITEM_COUNT:int = 15;
private function cc():void
{
for (var i:int = 0; i < ITEM_COUNT; i++)
{
var item:TestObject = new TestObject;
item.label = "Item " + i;
d.addItem(item);
}
}
]]>
</Script>
<AdvancedDataGrid id="list" dataProvider="{d}" height="100%">
<columns>
<AdvancedDataGridColumn dataField="label"
itemRenderer="MyItemRenderer"/>
</columns>
</AdvancedDataGrid>
</Application>
MyItemRenderer.as:
package
{
import flash.events.MouseEvent;
import mx.collections.ArrayCollection;
import mx.controls.AdvancedDataGrid;
import mx.controls.LinkButton;
import mx.controls.dataGridClasses.DataGridListData;
public class MyItemRenderer extends LinkButton
{
private var theData:Object;
public function MyItemRenderer()
{
super();
}
override public function set data(value:Object):void
{
super.data = value;
theData = value;
if(value != null)
{
label = value[DataGridListData(listData).dataField];
if(theData.highlighted)
{
setStyle("fontWeight", "bold");
}
else
{
setStyle("fontWeight", "normal");
}
addEventListener(MouseEvent.MOUSE_OVER,
changeDataProvider);
}
}
private function changeDataProvider(event:MouseEvent):void
{
var dp:ArrayCollection = ((event.target as
MyItemRenderer).owner as AdvancedDataGrid).dataProvider as
ArrayCollection;
var rowCount:int = 0;
for each(var testObject:TestObject in dp)
{
if((dp[rowCount] as TestObject).label == theData.label)
{
(((event.target as MyItemRenderer).owner as
AdvancedDataGrid).dataProvider[rowCount] as TestObject).highlighted =
true;
}
else
{
(((event.target as MyItemRenderer).owner as
AdvancedDataGrid).dataProvider[rowCount] as TestObject).highlighted =
false;
}
rowCount++;
}
}
}
}
HTH
Steve