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.
> > > >
> > > >
> > >
> >   
> >
>
>

Reply via email to