if (event.itemRenderer.data.valid || event.reason ==
DataGridEventReason.CANCELLED) {

   // omitted

} 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 new column or row - prevent it

event.preventDefault();

}

}

In all cases, when the last validation was invalid, I would like focus to
stay in the cell, and the red border to remain.

On Nov 29, 2007 2:36 PM, Alex Harui <[EMAIL PROTECTED]> wrote:

>    There's a CANCELLED reason for Esc.
>
> I'm kinda lost right now.  What do you want to happen on
>
> -tabbing to next column
> -enter going to next row
> -clicking on another cell in a different row
> -scrolling
> -clicking outside DG
> -esc cancelling edit
>
> Which cases aren't working?
>
>
>  ------------------------------
> *From:* flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] *On
> Behalf Of *Richard Rodseth
> *Sent:* Thursday, November 29, 2007 12:58 PM
> *To:* flexcoders@yahoogroups.com
> *Subject:* Re: [flexcoders] itemEditEnd preventDefault
>
>  The edge cases will get you. One issue (so far) with this is that if you
> Tab with an invalid value (focus is lost and regained), then follow up with
> an Esc, the committed value will be the invalid one. I might be able to live
> with this. If I call preventDefault in the OTHER case, I don't have that
> issue, but then the editor regains focus but without the current (invalid)
> value.
>
> On Nov 29, 2007 12:38 PM, Richard Rodseth <[EMAIL PROTECTED]> wrote:
>
> > 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