here are some examples: http://livedocs.macromedia.com/flex/15/flex_docs_en/wwhelp/wwhimpl/js/html/wwhelp.htm?href=00000325.htm
--- In [email protected], "Jason Doyle" <[EMAIL PROTECTED]> wrote: > > I would like to create a reusable cellRenderer that I can use on > multiple columns in a dataGrid. But I am having a hrad time wrapping my > brain around it. First, how would you call the same cellRenderer for > each column but populate it with different data for each? I have tried > to assign the cellReneder in actionscript like, > dataGrid.getColumnAt(7).cellRenderer = "comboBoxCellRenderer"; and then > set a dataProvider variable in the renderer but I cannot get that to > work. > > Even if I set the cell renderer with mxml I can only get the > dataProvider variable to populate the cellRenderer if I pass it a hard > coded object. If I pass it an object being coming in from a web service, > it doesn't work. I think that has something to do with timing. LIke the > cellRenderer gets created before the data come back from the WS. Any > help in the right direction would be appreciated. > > Here is some of the code... > > <!------------------------------------------------> > //comboBoxcellRenderer.mxml (From > http://www.richinternetapps.com/archives/000072.html) > <!------------------------------------------------> > > <mx:Canvas borderStyle="none" > xmlns:mx="http://www.macromedia.com/2003/mxml"> > > <mx:Script> > <![CDATA[ > > import mx.controls.*; > import com.iterationtwo.cairngorm.control.*; > > var combo : ComboBox; > var comboLabel : Label; > > var listOwner : Object; // the reference we receive to the list > var getCellIndex : Function; // the function we receive from the list > var getDataLabel : Function; // the function we receive from the list > var selectedItem : Object; > > static var dataProvider; > > //------------------------------------------------------------ > > function createChildren(Void) : Void > { > super.createChildren(); > > createClassObject( Label, "comboLabel", 1, { styleName:this, > owner:this } ); > createClassObject( ComboBox, "combo", 2, { styleName:this, > owner:this, selectable:true, editable:true } ); > > combo.addEventListener( "change", this ); > combo.addEventListener( "enter", this ); > > combo.dataProvider = comboBoxCellRenderer.dataProvider; > > combo.setStyle( "backgroundColor", getStyle( "selectionColor" ) ); > > size(); > } > > //------------------------------------------------------------ > > function size( Void ) : Void > { > combo.setSize( width, 20 ); > comboLabel.setSize( width, 20 ); > } > > //------------------------------------------------------------ > > function setValue( str : String, item : Object, selection : String ) : > Void{ > combo.dataProvider = comboBoxCellRenderer.dataProvider; > combo.labelField = 'PERSONNELFULLNAME'; > if ( item == undefined ){ > comboLabel.visible = false; > combo.visible = false; > return; > } > > if ( selection == "normal" || selection == "highlighted" ){ > comboLabel.text = item[ getDataLabel() ]; > combo.visible = false; > comboLabel.visible = true; > } > else if ( selection == "selected" ){ > selectedItem = item; > > for( var i = 0; i < combo.dataProvider.length; i++ ){ > if( combo.dataProvider[i] == item[ getDataLabel() ] ){ > combo.selectedIndex = i; > break; > } > } > comboLabel.visible = false; > combo.visible = true; > combo.setFocus( false ); > } > } > > //------------------------------------------------------------ > > function getPreferredHeight( Void ) : Number{ > return 20; > } > > //------------------------------------------------------------ > > function getPreferredWidth( Void ) : Number{ > return 125; > } > > //------------------------------------------------------------ > > function reorder( datos : Array, choice : String ) : Array{ > var index:Number = 0 > var newArray = new Array() > for( var i=0; i < datos.length; i++ ) > { > if( datos[i].label != choice ) > { > index++; > newArray[index] = datos[i]; > } > else > { > newArray[0] = datos[i]; > } > } > return newArray; > } > > //------------------------------------------------------------ > > function change(){ > selectedItem[ getDataLabel() ] = combo.selectedItem; > EventBroadcaster.getInstance().broadcastEvent( "updateItem", > selectedItem ); > } > > //------------------------------------------------------------ > > function enter(){ > if ( combo.text != undefined && combo.text.length > 0 ) > { > dataProvider.addItem( combo.text ); > selectedItem[ getDataLabel() ] = combo.text; > EventBroadcaster.getInstance().broadcastEvent( "updateItem", > selectedItem ); > } > } > > //------------------------------------------------------------ > > function draw() : Void{ > super.draw(); > > if ( combo.text_mc.border_mc.getDepth() > > combo.text_mc.label.getDepth() ) > combo.text_mc.border_mc.swapDepths( combo.text_mc.label ); > } > > ]]> > > </mx:Script> > </mx:Canvas> > > > > > > > <!------------------------------------------------> > //projectTaskView.mxml (excerpt only) > <!------------------------------------------------> > > <?xml version="1.0" encoding="utf-8"?> > <mx:VBox > xmlns:mx="http://www.macromedia.com/2003/mxml" > xmlns:ppcView="com.thomson.ppc.stickies.view.*" > width="100%" > height="595" > backgroundColor="#666666" > cornerRadius="24" > creationComplete="initCellRenderer();" > marginBottom="6" marginTop="6" marginLeft="6" marginRight="6"> > > <ppcView:ProjectTasksViewHelper name="projectTasksViewHelper" > view="{ this }" /> > > <!-- > ========================================================================\ > ==================== --> > > <mx:Script> > <![CDATA[ > import com.iterationtwo.cairngorm.view.ViewLocator; > import com.iterationtwo.cairngorm.control.EventBroadcaster; > import com.thomson.ppc.renderers.*; > > //page variables > var aProjectTasks : Array = new Array(); > var oPersonnel : Object = new Object(); > > > > //----------------------------------------------------------------------\ > ------------- > > //Here is where I am trying to popualte the cellrenderer > > private function initCellRenderer() : Void{ > //upon init, populate the custom rendered combo with > personnel > var projectAssignmentsViewHelper = > ViewLocator.getInstance().getViewHelper("projectAssignmentsViewHelper"); > oPersonnel = projectAssignmentsViewHelper.getPersonnel(); > > comboBoxCellRenderer.dataProvider = oPersonnel; > > > > //----------------------------------------------------------------------\ > ------------- > > > > > > > ]]> > </mx:Script> > > <!-- > ========================================================================\ > ==================== --> > > <mx:DataGrid id="projectTasksGrid" editable="true" > cellFocusOut="updateResultSet(event)" width="100%"> > <mx:columns> > <mx:Array> > <mx:DataGridColumn columnName="NUMPERCENTCOMPLETE" > headerText="Complete" width="38" labelFunction="concatPercent" /> > <mx:DataGridColumn columnName="TXTTASK" headerText="Task" > width="160"/> > <mx:DataGridColumn columnName="TXTPRIORITY" > headerText="Priority" width="32" labelFunction="convertPriority" /> > <mx:DataGridColumn columnName="NUMRANK" headerText="Rank" > width="40"/> > <mx:DataGridColumn columnName="TXTEFFORT" > headerText="Effort" width="25" labelFunction="convertEffort"/> > <mx:DataGridColumn columnName="NUMHOURS" > headerText="Hours" width="32"/> > <mx:DataGridColumn columnName="NUMDURATION" > headerText="Duration" width="30"/> > <mx:DataGridColumn columnName="NUMPERSONNELID" > headerText="Responsible" width="78"/> > <mx:DataGridColumn columnName="YNTESTINGNEEDED" > headerText="Testing Needed" width="35" labelFunction="convertTesting"/> > <mx:DataGridColumn columnName="" headerText="Hours Left" > width="65" labelFunction="calculateHoursLeft" backgroundColor="#eaeaea" > editable="false"/> > <mx:DataGridColumn columnName="" headerText="Dur. Left" > width="65" backgroundColor="#eaeaea" labelFunction="calculateDurLeft" > editable="false" /> > <mx:DataGridColumn columnName="" headerText="DONE" > width="55" backgroundColor="#eaeaea" labelFunction="calculateComplete" > editable="false"/> > </mx:Array> > </mx:columns> > </mx:DataGrid> > > </mx:VBox> > -- 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/

