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] <mailto:[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] <mailto:[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] <mailto:[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:flexcoders@yahoogroups.com> [mailto:flexcoders@yahoogroups.com <mailto:flexcoders@yahoogroups.com> ] On Behalf Of Richard Rodseth Sent: Thursday, November 29, 2007 10:52 AM To: flexcoders@yahoogroups.com <mailto: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] <mailto:[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] <mailto:[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> [mailto:flexcoders@yahoogroups.com <mailto:flexcoders@yahoogroups.com> ] On Behalf Of Richard Rodseth Sent: Wednesday, November 28, 2007 12:20 PM To: flexcoders@yahoogroups.com <mailto: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.