Thanks Tracy!

Yes, I was expecting it to dispatch an event because my data is an ArrayCollection, however now I know that modifying my underlying Objects' values via properties doesn't trigger the necessary change events. :-)

Manually calling itemUpdated on the Object that I've changed does the trick though. I'll also look at setItemAt. The reason I'm directly accessing the Object's properties is that I based this code on an example from the docs, so I blame Adobe if that's not best practice! :-)

Guy

On 07/01/2009, at 5:03 AM, Tracy Spratt wrote:


Flex uses events to cause the UI to update in response to changes in the underlying data.



If you use the correct API to update the data, then Flex will dispatch the necessary events. Common API methods include setItemAt(), addItem(), … using the API is the best practice.



If you manually update a dataProvider item, say by assigning a value to a property, then the necessary events are not dispatched. The collection.itemUpdated() method can be used in this case.



See the recent thread “Slow datagrid updates” for example code.



Tracy



From: [email protected] [mailto:[email protected]] On Behalf Of Guy Morton
Sent: Tuesday, January 06, 2009 7:49 AM
To: [email protected]
Subject: [flexcoders] DataGrids, itemRenderers and dataChange events



Hello

I hope someone here will be good enough to help me. I have a DataGrid,
and a custom itemRenderer that shows an image depending on the value
of the data in that cell. The trouble is that I am updating the value
of the data in that cell when I do an update to one of the other cells
in that row (via a different itemEditor, triggered by the itemEditEnd
event), but that change is not being shown in the cell in question
unless it gets redrawn by some other means, eg scrolling the field out
of view and back in will show the new data, as will rearranging the
columns (presumably because both of these actions force a redraw of
the data in the cell in question).

Is there a way to force the updated value to trigger a redraw in the
cell? My renderer is set up to catch the dataChange event but that
doesn't seem to get dispatched unless one of the aforementioned things
is done to force it.

Am I missing something here? Or is this a flaw in Flex?

Guy





Reply via email to