I'm having a problem implementing keyboard navigation with a custom editable
datagrid. I want to have it such that if you are editing a cell, you can use
the arrow keys to move around and edit other cells. Given a simple grid I can
capture the keydown and set the editedItemPosition. However, the custom grid
has a listener for ITEM_EDIT_END and the handler for that event is
private function handleEditEnd(event:DataGridEvent):void
{
trace("datagrid.handelEditEnd");
trace(event.reason.toString());
if (event.reason ==
mx.events.DataGridEventReason.CANCELLED)
{
// Do not update cell.
return;
}
// get the new data from the editor
var newData:String =
mx.controls.TextInput(event.currentTarget.itemEditorInstance).text;
var row:int = event.rowIndex;
var col:int = event.columnIndex - 1;
trace("newData: " + newData);
event.preventDefault();
this.destroyItemEditor();
//try to update the data in the data provider
this.dataProvider[row].cells[col].data = newData;
this.dataProvider.itemUpdated(event.itemRenderer.data);
}
I got this by looking at the example in the livedocs for "Passing multiple
values back from an item editor"
[http://livedocs.adobe.com/flex/3/html/celleditor_8.html#247667] which shows
using event.preventDefault() and destroyItemEditor(). However, this causes
problems with getting the keyboard navigation to work. If I comment out those
lines, the keyboard navigation works but then the datagrid doesn't update the
dataProvider.
Any ideas how to work around this?
-Phil