JB,
Why are you casting dg.selectedItem when it is already is a ResourceVO? The
selectedItem value is the item passed into the addItem method.
ArrayCollection has events to support updating a view (DataGrid, List,
ComboBox). This can be accessed through the component itself or via the
dataProvider property.
Try this:
private function init():void{
var obj1:ResourceVO = new ResourceVO();
obj1.value = "foo-0";
obj1.key = "bar-0";
dg.addItem( obj1 );
var obj2:ResourceVO = new ResourceVO();
obj2.value = "foo-1";
obj2.key = "bar-1";
dg.addItem(obj2);
var obj3:ResourceVO = new ResourceVO();
obj3.value = "foo-2";
obj3.key = "bar-2";
dg.addItem(obj3);
}
When dataProvider is set, the passed object is wrapped by an ArrayCollection
depending on what is passed. If an Array is passed, this becomes the 'source'
property of the ArrayCollection. You may be seeing a side effect of an
ArrayCollection being passed into an ArrayCollection via the dataProvider set
operation. By default, the dataGrid already has a ArrayCollection and using
addItem on the DataGrid (dg) will make things simpler internally. I also do not
think that the "dataObj" variable needs to be [bindable] here and might be a
source of an error.
ArrayCollection is a funky class as it extends Proxy via ListCollectionView.
Proxy allows the entire DataProvider API to be a façade allowing control over
iteration via the Proxy.nextName, Proxy.nextNameIndex, and Proxy.nextValue at a
low level.
My gut feel is that the code can be simpler and accomplish identical results.
Cheers,
Cynergy Systems, Inc.
Theodore Patrick
Sr. Consultant
[EMAIL PROTECTED]
tel: 1.866.CYNERGY
http://www.cynergysystems.com
________________________________________
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of box110a
Sent: Wednesday, April 12, 2006 2:08 PM
To: [email protected]
Subject: [flexcoders] programatically assigning an ArrayCollection as the
DataProvider bug...
I didn't see this in the known issues. but I'll attempt to explain whats going
on:
Here is my Code (i'll explain the bug at the end):
DGTest.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*"
layout="absolute" creationComplete="init();"
pageTitle="DataGrid Test">
<mx:Script>
<![CDATA[
import mx.utils.ArrayUtil;
import com.crap.vo.ResourceVO;
import mx.collections.ArrayCollection;
[Bindable]
public var dataObj:ArrayCollection;
[Bindable]
public var objTemp:ResourceVO = new ResourceVO();
private function init():void{
dataObj = new ArrayCollection();
var obj1:ResourceVO = new ResourceVO();
obj1.value = "foo-0";
obj1.key = "bar-0";
dataObj.addItem(obj1);
var obj2:ResourceVO = new ResourceVO();
obj2.value = "foo-1";
obj2.key = "bar-1";
dataObj.addItem(obj2);
var obj3:ResourceVO = new ResourceVO();
obj3.value = "foo-2";
obj3.key = "bar-2";
dataObj.addItem(obj3);
dg.dataProvider = dataObj;
}
private function selectRow():void{
objTemp = ResourceVO(dg.selectedItem);
}
]]>
</mx:Script>
<mx:HBox width="90%" height="90%" horizontalCenter="0" verticalCenter="0">
<mx:Panel layout="absolute" height="50%" width="50%">
<mx:VBox width="443" height="90%" horizontalCenter="1"
verticalCenter="-1">
<mx:DataGrid id="dg" width="100%" height="100%"
change="selectRow();"
editable="true"
>
<mx:columns>
<mx:DataGridColumn headerText="Key" dataField="key"/>
<mx:DataGridColumn headerText="Value"
dataField="value"/>
</mx:columns>
</mx:DataGrid>
</mx:VBox>
</mx:Panel>
<mx:Panel width="50%" height="50%" layout="absolute">
<mx:Form x="10" y="10" height="156" width="445">
<mx:FormItem label="Key:">
<mx:TextInput id="txtKey" data="{objTemp.key}"/>
</mx:FormItem>
<mx:FormItem label="Value:">
<mx:TextInput id="txtValue" data="{objTemp.value}"/>
</mx:FormItem>
</mx:Form>
</mx:Panel>
</mx:HBox>
</mx:Application>
ResourceVO.as
package com.crap.vo {
import com.crap.mvc.vo.ValueObject;
import mx.resource.Locale;
import mx.controls.listClasses.BaseListData;
import mx.controls.listClasses.IDropInListItemRenderer;
import mx.data.IManaged;
import mx.data.utils.Managed;
import mx.core.mx_internal;
[Bindable]
public class ResourceVO implements ValueObject{
public var key:String = "";
public var value:String = "";
public var locale:Locale = new Locale("eng_us");
}
}
The Issue:
When I view this application, it works as expected: it shows the datagrid with
the three items and when I click on it, the fields to the right are populated.
However, the blue selection highlight doesn't move off of the last item in the
list! I have also sceen this issue in a ComboBox.
Any ideas as to why this is happening?
-JB
--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com
________________________________________
YAHOO! GROUPS LINKS
* Visit your group "flexcoders" on the web.
* To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
* Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
________________________________________
--
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.385 / Virus Database: 268.4.1/309 - Release Date: 4/11/2006
--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/flexcoders/
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/