0

編集可能な日付フィールド itemrenderer を作成しようとしています。

カレンダー ボタンをクリックすると、この itemrenderer は正常に動作します。しかし、キーボードでデータを入力すると、データが更新されず、フィールドがフォーカスされていないとデータが空になります。

私のコードの下を参照してください

Datagrid列はそのようなものです

    <mx:DataGridColumn dataField="echDate"  
       headerText="Date" headerStyleName="dgHeader"
itemEditor="ui.itemRenderer.irDateD" editorDataField="dateModif"/>

そしてアイテムエディタは

    <?xml version="1.0" encoding="utf-8"?>
<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                          xmlns:s="library://ns.adobe.com/flex/spark" 
                          xmlns:mx="library://ns.adobe.com/flex/mx" 
                          focusEnabled="true">

    <fx:Script>
        <![CDATA[


            import mx.controls.dataGridClasses.DataGridListData;
            import mx.controls.listClasses.BaseListData;
            import mx.events.CalendarLayoutChangeEvent;
            import mx.events.FlexEvent;

            [Bindable] public var dateModif:String;


            override public function set data(value:Object):void{
                if(listData){
                    var newDate:Date;
                    var value1 = value.echDate;

                    if (value1 is String){
                        newDate = new DateUtility().dateStringToObject2(value1);
                        super.data = newDate;
                        dfDG.selectedDate = newDate;
                        dfDG.text = value1;

                    } 
                    else if (value1 is Date){
                        super.data = value as Date;
                        dfDG.selectedDate = value1 as Date;
                        dfDG.text = new DateUtility().DateAsToString(value1);
                    }
                }        
            }



            protected function dfDG_changeHandler(event:CalendarLayoutChangeEvent):void
            {
                dateModif=dfDG.text;
            }

        ]]>
    </fx:Script>


    <mx:DateField id="dfDG"
                  editable="true"
                  formatString="DD/MM/YYYY"
                  yearNavigationEnabled="true"
                  width="95"
                  change="dfDG_changeHandler(event)"
                  >

    </mx:DateField>
</s:MXDataGridItemRenderer>

誰かがそれを解決するのを手伝ってくれたら嬉しいです

4

1 に答える 1

0

この解決策を試すことができます。

データが更新されたかどうかを確認できるように、2 番目の DG を挿入しました。

私はあなたの DateUtility().dateStringToObject2(value1) を持っていません。そのため、代わりに Validator を使用しています。

Renderer と App の間の「後方接続」は、Binding によって実装されます。DateUtility() を使用して入力を修正すると、結果を DateField の text プロパティに挿入できます。

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">

<fx:Declarations>
    <fx:Model id="cells">
        <dataset>
            <data>
                <name>a</name>
                <echDate>14/01/2013</echDate>
            </data>
            <data>
                <name>b</name>
                <echDate>15/01/2013</echDate>
            </data>
        </dataset>
    </fx:Model>
</fx:Declarations>

<s:VGroup>

<mx:DataGrid 
    width="386" height="100" dataProvider="{cells.data}" 
    alternatingItemColors="[0xffffff]"
    horizontalGridLineColor="0x999999" 
    horizontalGridLines="true"
    verticalGridLineColor="0x999999" 
    sortableColumns="false" 
    resizableColumns="false" selectable="false">

    <mx:columns>
        <mx:DataGridColumn dataField="name" headerText="Name"/>
        <mx:DataGridColumn dataField="echDate" headerText="Date"
       itemRenderer="com.dgdatefield.irDateD"/>
    </mx:columns>
</mx:DataGrid>

<mx:DataGrid 
    width="386" height="100" 
    dataProvider="{cells.data}">

    <mx:columns>
        <mx:DataGridColumn dataField="name" headerText="Name"/>
        <mx:DataGridColumn dataField="echDate" headerText="Date"/>
    </mx:columns>

</mx:DataGrid>

</s:VGroup>

</s:Application>

//レンダラー

<?xml version="1.0" encoding="utf-8"?>
<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                      xmlns:s="library://ns.adobe.com/flex/spark" 
                      xmlns:mx="library://ns.adobe.com/flex/mx" 
                      focusEnabled="true">
<fx:Declarations>
    <mx:DateValidator 
        id="dateValidator"
        source="{dfDG}" 
        property="text" 
        inputFormat="DD/MM/YYYY"
        wrongLengthError="The date format is not correct"
        allowedFormatChars="/ - ."/>
</fx:Declarations>

<fx:Binding source="dfDG.text" destination="data.echDate"/>

<s:HGroup width="100%" horizontalAlign="center">
    <mx:DateField 
          id="dfDG" text="{data.echDate}"
          editable="true"
          formatString="DD/MM/YYYY"
          yearNavigationEnabled="true"
          width="120"/>
</s:HGroup>

</s:MXDataGridItemRenderer>

お役に立てれば幸いです

于 2013-01-31T19:34:24.037 に答える