Modified version of Zoids custom combo box to allow preselected value

Wow that title sounds complex. If you don't remember, a few hours ago I blogged about an article that Boyzoid wrote about how easy it was to do a custom component in Flex 2. His example added a new method to ComboBox, selectedItemByValue.

What if you wanted to set the selected item when the component is created? I made these modifications to Zoid's code:

<?xml version="1.0" encoding="utf-8"?>
<mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="checkSelected()">

<mx:Script>
<![CDATA[
[Bindable] public var defaultSelectedValue:int;

public function selectedItemByValue(val:int):void{
   for (var i:int=0;i<this.dataProvider.length;i++){
      var item:int = this.dataProvider[i].data;

      if(item == val){
         this.selectedIndex = i;
         break;
      } else{ this.selectedIndex = 0;}
   }
}

private function checkSelected():void {
   selectedItemByValue(defaultSelectedValue);
}
]]>
</mx:Script>
   
</mx:ComboBox>

Note first the use of creationComplete in the top tag. That just means - run checkSelected() when done. I then created a new public variable named defaultSelectedValue. My checkSelected function simply then calls the function Boyzoid had written. This then lets me do the following in the calling code:

<comp:customComboBox dataProvider="{comboData}" id="myCombo2" defaultSelectedValue="2" />
<comp:customComboBox dataProvider="{comboData}" id="myCombo3" defaultSelectedValue="3" />
<comp:customComboBox dataProvider="{comboData}" id="myCombo4" />

Not sure if this is best practice or not - and I did guess at a few things, but I thought I'd share.

Comments

Ray - That is exactly why I created that custom component to begin with.
# Posted By Scott Stroz | 11/22/06 6:29 PM
Scott - how did you do it? Did I do it right? I mean it works obviously - but do you have any suggestions?
# Posted By Raymond Camden | 11/22/06 7:52 PM
# Posted By Ben Forta | 11/22/06 10:05 PM
You should check out the com.adobe.ColdFusion.BindableCombobox and ..BindableList components that are generated when you run the ColdFusion/Flex application wizard too.

It does the same thing, except it does it by adding 1 new property "valueField" to know which property of the dataprovider 'objects' to compare against. And it sets the data value by overriding the selectedItem property.
# Posted By Mike Nimer | 11/23/06 12:27 AM
You should check out the com.adobe.ColdFusion.BindableCombobox and ..BindableList components that are generated when you run the ColdFusion/Flex application wizard too.

It does the same thing, except it does it by adding 1 new property "valueField" to know which property of the dataprovider 'objects' to compare against. And it sets the data value by overriding the selectedItem property.
# Posted By Mike Nimer | 11/23/06 12:27 AM
Thanks for the pointer Mike. Is there a "CFLib for Flex" yet?
# Posted By Raymond Camden | 11/23/06 8:04 PM
not sure, however, there is a developers exchange for flex on adobe.com. (last I checked there was only 1 entry).
# Posted By Mike Nimer | 11/25/06 8:57 AM
I'll write a blog entry and see what it fleshes out. There -must- be one somewhere. I can't believe there wouldn't be.
# Posted By Raymond Camden | 11/25/06 9:02 AM
hi.

i have problem regarding showing checkboxes in custom combobox in order to do multiselect functionality.

can u please help me ?

thanks in advance.
# Posted By prashant shelke | 2/16/07 3:11 AM
Has anyone modified this for dataGrids with allowMultipleSelections?

I have several cases where I need to pre-select default items in a dataGrid.

default items come from my CFC. For example, mydefaults.dataProvider is a query containing CategoryID, Category.

mydataGrid.dataProvider also contains CategoryID and Category.

Seems like I'd need to do a nested loop comparing the mydataGrid.dataProvider[i].categoryID to defaults.dataProvider[j].categoryID? or is there an easier way?

I love Flex! But...ColdFusion sure did make life easier with CFSELECT!

Don
# Posted By Don Kerr | 8/16/07 5:10 PM