Потребовалось изменить поведение инлайн редактора в DataGrid так , чтобы редактор активировался не по получении фокуса, а по двойному клику.
View CodeACTIONSCRIPT | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | package my.components { import flash.events.MouseEvent; import flash.geom.Point; import mx.controls.DataGrid; import mx.controls.listClasses.IListItemRenderer; import mx.events.DataGridEvent; public class MyDataGrid extends DataGrid { [Inspectable(category="General", enumeration="true,false", defaultValue="false")] public var doubleClickStartEdit:Boolean = false; private var displayableColumns:Array; private var displayableColumnsToColumns:Array; public function MyDataGrid() { super(); addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); addEventListener(MouseEvent.DOUBLE_CLICK, mouseDoubleClickHandler); } override protected function mouseUpHandler(event:MouseEvent):void { var tmpEditable:Boolean = this.editable; if(doubleClickStartEdit) { this.editable = false; } super.mouseUpHandler(event); this.editable = tmpEditable; } override protected function mouseDoubleClickHandler(event:MouseEvent):void { var dataGridEvent:DataGridEvent; var r:IListItemRenderer; var pos:Point; r = mouseEventToItemRenderer(event); super.mouseDoubleClickHandler(event); if (r && r != itemEditorInstance) { pos = itemRendererToIndices(r); if (pos && pos.y >= 0 && editable && doubleClickStartEdit) { if (displayableColumns[pos.x].editable) { dataGridEvent = new DataGridEvent(DataGridEvent.ITEM_EDIT_BEGINNING, false, true); dataGridEvent.columnIndex = displayableColumnsToColumns[pos.x]; dataGridEvent.dataField = displayableColumns[pos.x].dataField; dataGridEvent.rowIndex = pos.y; dataGridEvent.itemRenderer = r; dispatchEvent(dataGridEvent); } } } } override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { super.updateDisplayList(unscaledWidth, unscaledHeight); displayableColumns = new Array; displayableColumnsToColumns = new Array; var n:int = columns.length; for (var i:int = 0; i < n; i++) { if (columns[i].visible) { displayableColumns.push(columns[i]); displayableColumnsToColumns.push(i); } } } } } |
В приложении использую так:
View CodeMXML | |
1 | <view:MyDataGrid doubleClickStartEdit="true" doubleClickEnabled="true"/> |

0 Отзывов на “Редактирование элемента в DataGrid по двойному щелчку”
Оставить отзыв