What version of Flex are you using?  Flex 3 Beta 2 and Flex 2.0.1
HotFix2 (which are the only versions you should be using) both throw
exceptions with this example.

 

DateField isn't really set up to handle XML when it is an item renderer.
I sort of got it working like this:

 

<mx:DataGridColumn headerText="Date" dataField="date"

width="100" editable="true"

editorDataField="selectedDate" rendererIsEditor="true">

<mx:itemRenderer>

            <mx:Component>

                        <mx:DateField>

                                    <mx:Script>

                                    <![CDATA[

                                                import
mx.controls.listClasses.BaseListData;

                                                import
mx.controls.dataGridClasses.DataGridListData;

                                                // block the underlying
DateFields listData so it

                                                // doesn't think it is
in a DataGrid

                                                private var
_ld:BaseListData;

                                                override public function
get listData():BaseListData

                                                {

                                                            return _ld;

                                                }

 

                                                override public function
set listData(value:BaseListData):void

                                                {

                                                            _ld = value;

                                                }

 

                                                private var _dd:Object;

                                                override public function
get data():Object

                                                {

                                                            return _dd;

                                                }

 

                                                override public function
set data(value:Object):void

                                                {

                                                            _dd = value;

 

                                                            if (_ld &&
_ld is DataGridListData)

                                                            {

 
var s:String = value[DataGridListData(_ld).dataField].toString();

 
trace(s);

 
super.data = new Date(Date.parse(s));

                                                            }

                                                }

 

                                    ]]>

                                    </mx:Script>

                        </mx:DateField>

            </mx:Component>

</mx:itemRenderer>

</mx:DataGridColumn>

 

Note that the first date in your example is not a valid format for
Date.parse().

 

HTH,

-Alex

 

________________________________

From: [email protected] [mailto:[EMAIL PROTECTED] On
Behalf Of carl_steinhilber
Sent: Tuesday, December 04, 2007 9:42 AM
To: [email protected]
Subject: [flexcoders] Re: Using DateField as itemEditor for DataGrid
column

 

Hi Alex,

Sure. (Holiday-themed) example below. :-) XML inline, of course,
rather than loaded from external doc as in my final app. As is, it
works (all data is shown, and clicking in the date field opens the
DateField editor... there's a coercion error on click in debug, but
it's silent when not in debug).

Changing the "date" DataGridColumn to 
<mx:DataGridColumn headerText="Date" dataField="date"
width="100" editable="true"
itemRenderer="mx.controls.DateField"
editorDataField="selectedDate" rendererIsEditor="true" /> 

prevents any data from being shown. In debug, the coercion error
occurs immediately on creation... which makes perfect sense.

So the issue is definitely that Flex can't parse the date from the XML
node. But I'm at a loss as to how to define the date in the XML to fix
the problem. Am I going to have to step through the XML and convert it
to an Object, converting the date along the way? Or is there a more
straight-forward solution I'm missing? Would there be a way to wrap
the DateField in a custom renderer that can convert the date on the fly?

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml
<http://www.adobe.com/2006/mxml> "
layout="vertical" creationComplete="init()" >
<mx:Script>
<![CDATA[
import mx.collections.XMLListCollection;

[Bindable]
private var xmlChristmas:XMLListCollection;

private function init():void
{
xmlChristmas = new
XMLListCollection(xmlDaysOfChristmas.day.copy());
}

private var xmlDaysOfChristmas:XML = 
<root>
<day>
<name>First Day of Christmas</name>
<date>2007-12-25T00:00:00.0000000-05:00</date>
<gift>Partridge in a pear tree</gift>
</day>
<day>
<name>Second Day of Christmas</name>
<date>12/26/2007</date>
<gift>Two turtle doves</gift>
</day>
<day>
<name>Third Day of Christmas</name>
<date>Thu Dec 27 00:00:00 GMT-0800 2007</date>
<gift>Three french hens</gift>
</day>
</root>;
]]>
</mx:Script>

<mx:DataGrid id="dgOutput" dataProvider="{xmlChristmas}"
width="600" height="160" editable="true">
<mx:columns>
<mx:DataGridColumn headerText="Name" dataField="name"
width="200" editable="true" />
<mx:DataGridColumn headerText="Date" dataField="date"
width="100" editable="true"
itemEditor="mx.controls.DateField"
editorDataField="selectedDate" /> 
<!-- mx:DataGridColumn headerText="Date" dataField="date"
width="100" editable="true"
itemRenderer="mx.controls.DateField"
editorDataField="selectedDate" rendererIsEditor="true" / --> 
<mx:DataGridColumn headerText="Gift" dataField="gift"
width="300" editable="true" /> 
</mx:columns>
</mx:DataGrid> 
</mx:Application>

--- In [email protected] <mailto:flexcoders%40yahoogroups.com>
, "Alex Harui" <[EMAIL PROTECTED]> wrote:
>
> Can you post a mini-example?
> 
> 
> 
> ________________________________
> 
> From: [email protected] <mailto:flexcoders%40yahoogroups.com>
[mailto:[email protected] <mailto:flexcoders%40yahoogroups.com>
] On
> Behalf Of carl_steinhilber
> Sent: Sunday, December 02, 2007 11:43 PM
> To: [email protected] <mailto:flexcoders%40yahoogroups.com> 
> Subject: [flexcoders] Using DateField as itemEditor for DataGrid
column
> 
> 
> 
> 
> I'm having a problem using a DateField as a itemRenderer/editor for a
> column in a dataGrid.
> 
> If I set the DateField as my itemEditor, everything works perfectly.
> But if I set the DateField as my itemRenderer and set rendererIsEditor
> to true the dataGrid renders completely blank (no data in *any* field)
> and locks down so *nothing* is editable.
> 
> In reading posts in the archives in this group and elsewhere, folks
> with similar issues were told to make sure the data bound to the
> column is of type date.
> But I have two issues with that:
> 1) if it wasn't understood as being of type date, why would it work
> when the dateField was set as the itemEditor
> and
> 2) I'm loading in the dataProvider for the DataGrid as a Bindable
> XMLListCollection from an external XML file... and I'm not sure how I
> can designate in XML that the node is of type date.
> 
> Anyone have any info or pointers? They'd be greatly appreciated.
> 
> Thanks in advance!
> -Carl
>

 

Reply via email to