Details
-
Improvement
-
Status: Closed
-
Blocker
-
Resolution: Not A Problem
-
Adobe Flex SDK 2.0.1 (Release)
-
None
-
Affected OS(s): All OS Platforms
Affected OS(s): All OS Platforms
Language Found: English
Description
Even if the modal PopUp appears, the parent win, in this case datagrid is available to edit.
This default seems not good. There is a workaround, set dg.editable = false.
However, could you improve the FocusManager to handle the focus, especially to modal
popup much easier to develop???
Reproduction:
1. Run alerTest.mxml
2. In the cell, 20060606, remove the last digit 6 to show alert
3. Enter Tab Key very quickly several times before displaying Alert win
or Enter Tab Key and Enter Key at the same time, actually enter Enter key is little bit later
4. Do the above step 3 several times
5. Focus remains on the dataGrid.
Actual Results:
even if the Alert window appears, but the focus remains on the DataGrid and the key control is available on the DataGrid.
Expected Results:
Workaround:
Put dg.editable = false; // disable the datagrid., if necesarry
Test Case:
alerTest.mxml
==========
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
<mx:Model id="dataModel" source="AlertData.xml"/>
<mx:Script>
<![CDATA[
import mx.core.UIComponent;
import mx.controls.Alert;
import mx.events.ValidationResultEvent;
import mx.validators.DateValidator;
import mx.events.DataGridEvent;
// RowIndex for error
[Bindable]
private var myRowIndex:int;
// ColumnIndex for erro
[Bindable]
private var myColIndex:int;
private var errFlag:Boolean = false;
private function itemEditHandler(evt:DataGridEvent):void {
var editor:Object = evt.currentTarget.itemEditorInstance;
var colIndex:int = evt.columnIndex;
var rowIndex:int = evt.rowIndex;
var str:String = editor.text;
if(colIndex == 0) {
if(str != "") {
var tdv:DateValidator = new DateValidator();
tdv.inputFormat = "yyyymmdd";
var res:ValidationResultEvent = tdv.validate(str);
if(res.type == "invalid") {
errFlag = true;
//dg.editable = false; // disable the datagrid.
myRowIndex = rowIndex;
myColIndex = colIndex;
callLater(showAlert,["Invalid Date!!"]);
} else {
if(str < "19700101" || str > "20180118") {
errFlag = true;
//dg.editable = false; // disable the datagrid.
myRowIndex = rowIndex;
myColIndex = colIndex;
callLater(showAlert,["Invalid Date!!"]);
}
}
}
}
}
// Show Alert Message
private function showAlert(strMsg:String):void {
Alert.buttonWidth = 102;
var objAlert:Alert = Alert.show(strMsg, "Warning!!");
objAlert.setStyle("color", "#000000");
objAlert.setStyle("headerColors", "#ffff99", "#ffff99");
objAlert.setStyle("backgroundColor", "#ffff99");
objAlert.setStyle("borderColor", "#ffff99");
if(objAlert.isPopUp) {
objAlert.addEventListener("close", mySetFocus);
}
}
// Cell move at the error
private function mySetFocus(event:Event):void {
dg.editedItemPosition =
;
//dg.editable = true; // allow data entry again.
}
]]
>
</mx:Script>
<mx:DataGrid id="dg" dataProvider="
{dataModel.data}" editable="true" itemEditEnd="itemEditHandler(event)" width="100%" height="100%" >
<mx:columns>
<mx:DataGridColumn dataField="Date"/>
<mx:DataGridColumn dataField="Time"/>
<mx:DataGridColumn dataField="Number"/>
<mx:DataGridColumn dataField="String"/>
</mx:columns>
</mx:DataGrid>
</mx:Application>
AlertData.xml
==========
<?xml version="1.0" encoding="utf-8"?>
<datas>
<data>
<Date>20060601</Date>
<Time>1000</Time>
<Number>100</Number>
<String>aaaaa</String>
</data>
<data>
<Date>20060602</Date>
<Time>1010</Time>
<Number>1000</Number>
<String>bbbbb</String>
</data>
<data>
<Date>20060603</Date>
<Time>1020</Time>
<Number>10000</Number>
<String>ccccc</String>
</data>
<data>
<Date>20060604</Date>
<Time>1030</Time>
<Number>100000</Number>
<String>ddddd</String>
</data>
<data>
<Date>20060605</Date>
<Time>1040</Time>
<Number>1000000</Number>
<String>eeeee</String>
</data>
<data>
<Date>20060606</Date>
<Time>1050</Time>
<Number>10000000</Number>
<String>fffff</String>
</data>
<data>
<Date>20060607</Date>
<Time>1100</Time>
<Number>100000000</Number>
<String>ggggg</String>
</data>
<data>
<Date>20060608</Date>
<Time>1110</Time>
<Number>1000000000</Number>
<String>hhhhh</String>
</data>
<data>
<Date>20060609</Date>
<Time>1120</Time>
<Number>10000000000</Number>
<String>iiiii</String>
</data>
<data>
<Date>20060610</Date>
<Time>1130</Time>
<Number>100000000000</Number>
<String>jjjjj</String>
</data>
<data>
<Date>20060611</Date>
<Time>1140</Time>
<Number>1000000000000</Number>
<String>kkkkk</String>
</data>
<data>
<Date>20060612</Date>
<Time>1150</Time>
<Number>10000000000000</Number>
<String>lllll</String>
</data>
</datas>