Actually, it turns out I have to take the DataGridEventReason into account.
private function handleItemEditEnd(event : DataGridEvent) : void { if (event.itemRenderer.data.valid || event.reason == DataGridEventReason.OTHER) { // do some stuff; } else if (event.reason == DataGridEventReason.OTHER) { // Losing focus outside the data grid - take it back myGrid.editedItemPosition = {columnIndex:event.columnIndex, rowIndex: event.rowIndex} } else { // Losing focus to another row or column - prevent it event.preventDefault(); } } On Nov 29, 2007 11:58 AM, Richard Rodseth <[EMAIL PROTECTED]> wrote: > Thanks, Alex. I don't know if there's a bug, per se. > As I mentioned in my first post, I only had an issue when losing focus to > something outside the grid. I may have a workable solution which is > hopefully not too ugly: > > - on itemEditEnd, call preventDefault, and re-activate the editor using > editedItemPosition > - in the editor, override setFocus and call the validator > > I haven't tested this with scrolling. > > On Nov 29, 2007 11:15 AM, Alex Harui <[EMAIL PROTECTED] > wrote: > > > Keep in mind that, if the user scrolls, or clicks outside the DG, > > there is no way to prevent the edit session from ending (at least not > > without a whole bunch of work). > > > > I just took a look at the code. When tabbing from one cell to another, > > preventDefault() on itemEditEnd should keep the editor alive. If you put > > together a small test case I can try to see why it doesn't work. > > > > ------------------------------ > > *From:* flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] *On > > Behalf Of *Richard Rodseth > > *Sent:* Thursday, November 29, 2007 10:52 AM > > *To:* flexcoders@yahoogroups.com > > *Subject:* Re: [flexcoders] itemEditEnd preventDefault > > > > And if I omit preventDefault, the invalid value remains, but the red > > focus ring turns blue. I've also established that setting editedItemPosition > > creates a new item editor (as I would expect), so I can't store and access a > > "valid" flag in the item editor component. > > > > Is there some other way to prevent an invalid field from losing focus? > > Or to restart the edit with the invalid value and have it re-validate? > > > > On Nov 28, 2007 1:51 PM, Richard Rodseth <[EMAIL PROTECTED]> wrote: > > > > > That keeps(restores) the focus, but also restores the pre-edit value. > > > > > > > > > On Nov 28, 2007 1:20 PM, Alex Harui < [EMAIL PROTECTED]> wrote: > > > > > > > IIRC, the pattern is to call preventDefault and then set > > > > editedItemPosition to the current position. > > > > > > > > ------------------------------ > > > > *From:* flexcoders@yahoogroups.com [mailto:flexcoders@yahoogroups.com > > > > ] *On Behalf Of *Richard Rodseth > > > > *Sent:* Wednesday, November 28, 2007 12:20 PM > > > > *To:* flexcoders@yahoogroups.com > > > > *Subject:* [flexcoders] itemEditEnd preventDefault > > > > > > > > I have an item renderer/editor that does as-you-type validation > > > > using standard Flex validators, and updates a "valid" property in the > > > > data. > > > > I wish to prevent the edit from ending if the data is valid. > > > > > > > > When tabbing, the following works in column one, but not in column > > > > two (the last editable column): > > > > > > > > private function handleItemEditEnd(event : DataGridEvent) : void { > > > > > > > > if (event.itemRenderer.data.valid) { > > > > > > > > // do some stuff > > > > > > > > } else { > > > > > > > > event.preventDefault(); > > > > > > > > } > > > > > > > > > > > > Any ideas? Also, does the renderer get any access to this event? If > > > > I want to move "valid" from the data to the renderer itself, I suppose I > > > > would have to cast event.itemRenderer above to my renderer type, and > > > > call a method or access a property. > > > > > > > > > > > > Thanks. > > > > > > > > > > > > > > > > >