Пытаюсь сделать грид в котором itemeditor меняется построчно. На первой строке скажем DateChosser, а на второй textEdit. Вот проблема в том, что оно так и происходит, но DateChooser не поверх грида рендерится, а внутри строки. Увидеть его полностью можно только если включть вертикальную прокрутку. | Код | <?xml version="1.0" encoding="utf-8"?> <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" implements="mx.core.IDataRenderer, mx.controls.listClasses.IListItemRenderer" verticalScrollPolicy="off" horizontalScrollPolicy="off" focusIn="onFocusIn(event)"> <mx:Script> <![CDATA[ import mx.controls.DateChooser; import mx.controls.NumericStepper; import mx.controls.TextInput; import mx.core.UIComponent; import mx.controls.Alert;
import mx.controls.dataGridClasses.DataGridListData; import mx.controls.listClasses.BaseListData;
private var stepper:NumericStepper; private var textField:TextInput; private var dateField:DateChooser; private var dataChanged:Boolean = false; public static const TYPE_STRING:String = "[class TextInput]"; public static const TYPE_DATECHOOSER:String = "[class DateChooser]"; public static const TYPE_NUMBER:String = "number"; override public function set data(value:Object):void { super.data = value; dataChanged = true; invalidateProperties(); } override protected function commitProperties():void { super.commitProperties(); if (dataChanged) { createEditor(); dataChanged = false; } } private function createEditor():void { removeEditor(); //super.DataGridSource.columns[super.selectedIndex].itemEditor //DataGridSource.columns[i].itemEditor.generator var vg:DBVerticalGrid = DBVerticalGrid(UIComponent(parent).parent.parent); //Alert.show(vg.toString()); if (data != null) { if (vg.DataGridSource.columns[vg.grid.selectedIndex].itemEditor.generator == TYPE_NUMBER) { stepper = new NumericStepper(); addChild(stepper); stepper.value = Number(data.Value); } else if (vg.DataGridSource.columns[vg.grid.selectedIndex].itemEditor.generator == TYPE_STRING) { textField = new TextInput(); addChild(textField); textField.text = String(data.Value); } else if (vg.DataGridSource.columns[vg.grid.selectedIndex].itemEditor.generator == TYPE_DATECHOOSER) { dateField = new DateChooser(); addChild(dateField); dateField.isPopUp = true; dateField.selectedDate = new Date('2008/04/19'); } }
} private function removeEditor():void { if (stepper != null) { removeChild(stepper); stepper = null; } if (textField != null) { removeChild(textField); textField = null; } if (dateField != null) { removeChild(dateField); dateField = null; }
} public function get newData():Object { var newValue:Object = null; //var dataVO:DataVO = DataVO(data); var vg:DBVerticalGrid = DBVerticalGrid(UIComponent(parent).parent.parent); if (vg.DataGridSource.columns[vg.grid.selectedIndex].itemEditor.generator == TYPE_NUMBER) { var stepper:NumericStepper = stepper; newValue = stepper.value; } else if (vg.DataGridSource.columns[vg.grid.selectedIndex].itemEditor.generator == TYPE_STRING) { newValue = textField.text; } else if (vg.DataGridSource.columns[vg.grid.selectedIndex].itemEditor.generator == TYPE_DATECHOOSER) { newValue = dateField.selectedDate.toDateString(); }
//return textDisplay.text; return newValue; } private function onFocusIn(e:FocusEvent):void { //dateField.open(); } ]]> </mx:Script> </mx:Canvas>
|
Тут пока моного лишнего. | Код | <mx:Canvas width="100%" height="100%"> <mx:AdvancedDataGrid id="dg" dataProvider="{srv.lastResult.contragents.contragent}" designViewDataType="flat" x="10" y="34"> <mx:columns> <mx:AdvancedDataGridColumn headerText="Дата рождения" dataField="contragent_birth" itemEditor="mx.controls.DateChooser"/> <mx:AdvancedDataGridColumn headerText="Имя" dataField="contragent_name"/> <mx:AdvancedDataGridColumn headerText="Фамилия" dataField="contragent_surname"/> </mx:columns> </mx:AdvancedDataGrid> <ns1:DBVerticalGrid id="vdg" DataGridSource="{dg}" verticalGap="6" verticalAlign="middle" horizontalAlign="center" x="358" y="34"/> </mx:Canvas>
|
|