DataGrid / itemRenderer help

I'm using the itemRenderer example in the help files to
convert the background color of a cell depending on the numeric
value. That all works just fine but I noticed that on the columns I
add that renderer too it makes the cells selectable -- not
editable, selectable. When you roll the cursor over any of the
columns that don't have the renderer on it, the cursor turns back
to an arrow. What do I need to add to the renderer script to make
it non selectable and so the arrow cursor is present? I just don't
want the user to think they can edit the text in the box.
Thanks

After a few hours of messing around and searching I found an
example how to achieve what I was looking for. I used "Label"
instead of "TextInput". A Label isn't selectable but the
backgroundColor isn't something you can change. So "one way" is to
draw in background color, like this -->
package assets{
import mx.controls.Label;
import flash.display.Graphics;
public class CellColored extends Label {
override protected function
updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
super.updateDisplayList(unscaledWidth, unscaledHeight);
var g:Graphics = graphics;
if (this.text != null){
text = this.text;
g.clear();
if(Number(text) < 2){
g.beginFill(0xCC0000);//red - bad
g.drawRect(0, 0, unscaledWidth, unscaledHeight);
g.endFill();
else if (Number(text) >= 2 && Number(text) <
4){
g.beginFill(0xF4E002); //yellow - okay
g.drawRect(0, 0, unscaledWidth, unscaledHeight);
g.endFill();
else if (Number(text) >= 4 && Number(text) <=
6){
//green - good
g.beginFill(0x009900);
g.drawRect(0, 0, this.unscaledWidth, this.unscaledHeight);
g.endFill();
setStyle("color", 0xFFFFFF);
}

Similar Messages

  • Datagrid itemRenderer - Help needed

    I am having trouble getting this little bit of code working.  I am trying to build an adhoc SQL generator, where the user selects the list of fields and then is able to set the WHERE criteria in a dataGrid, each row has field, criteria (ComboBox -equals, less than, etc), Low (editable), High (editable-Text or ComboBox lookup), AND/OR static ComboBox.  Some of the field selections could be regular text based fields like Name and other fields selected could be lookup fields like State.  I would like to be able to on rows that are TextInput render out a TextInput for LowValue and HighValue columns and for lookup fields render out a ComboBox with the dataProvider being set by a call to addComboData.
    addComboData simply uses the myDataGrid.selectedItem.fieldname to determine which of the lookup table to use and assigns that collection to CBoxdataProvider.  Seems simple enough but I have not been able to figure it out, some modifications seem to work, but only for a single dg cell others give me a list but does not populate lowValue but kill all other renderers.  All help is appreciated.
    <mx:DataGridColumn headerText="Low"  rendererIsEditor="true"  editorDataField="selectedItem" dataField="lowValue" textAlign="center">
    <mx:itemRenderer>
      <mx:Component>
        <mx:HBox horizontalScrollPolicy="off" verticalScrollPolicy="off" horizontalAlign="center">
           <mx:ComboBox  initialize="outerDocument.addComboData()" dataProvider="{ outerDocument.CBoxdataProvider }" labelField="Description" textAlign="left"  visible="{data.showCombo}" />
          <mx:TextInput id="lowLabel"  visible="{!data.showCombo}" />
       </mx:HBox>
      </mx:Component>
    </mx:itemRenderer>
    </mx:DataGridColumn>

    Setting the selected item is not the same as a click.  If you created the renderer correctly the style should change when you actually click on the item. (Does it?)
    Or are you just trying to get the first row's background to be a different style when the datagrid first shows?  (Initialization problem or not working at all?)

  • TabIndex in DataGrid ItemRenderer Component

    How to implement tabindex for the DataGrid ItemRenderer
    Component?Any
    idea Please.

    "ravi_bharathii" <[email protected]> wrote
    in message
    news:gbv9ps$k6r$[email protected]..
    > How to implement tabindex for the DataGrid ItemRenderer
    Component?Any
    > idea Please.
    Is this what you wanted?
    http://blogs.adobe.com/aharui/2008/08/datagrid_itemeditor_with_two_i.html

  • Showing/hiding images in a DataGrid ItemRenderer flex

    Hi,
         I have datagrid in that i have a itemRenderer in which i am loading images. What i need to do is i have to hide one or two images in tha datagrid.
    For example if i have ten rows of data with image means i need to hode 4 rows images. Please any body help me.
    Regards,
    Jayagopal.
    Message was edited by: Jayagopal Flex

    Try adding visible='{data.participant_count>0}' to your HBox or Component
    -K

  • Datagrid itemRenderer/itemEditor trouble

    I have a datagrid in a Flex project, the data grid has an XML file as the source (contents below), now due to the way it is formatted (I cannot change this) some of the data I want to display is inside a tag that isnt at the initial array level. Here is the file:
    <?xml version="1.0" encoding="utf-8" ?>
    <Categories>
    <Category>
      <CategoryName>Cat 1</CategoryName>
      <CategoryLink>http://www.google.com</CategoryLink>
      <CategoryData>
       <CategoryDescription>This is the description of category 1</CategoryDescription>
       <CategoryHeader>My Category Title 1</CategoryHeader>
       <CategoryNumber>1</CategoryNumber>
      </CategoryData>
    </Category>
    </Categories>
    I need to display CategoryName, CategoryLink, CategoryData.CategoryDescription, CategoryData.CategoryNumber.
    Now I blindly dropped the datagrid into the project and bound it to the data source, I get the following returned for CategoryData:
    [object CategoryData_type]
    Not much use, but with what appears to be a hack I changed the code for the column to read dataField="CategoryData.CategoryDescription", and hooray it works. I didnt realise at the time that this was wrong, and when I dropped in an itemEditor things went wrong. When the datagrids load they display the correct data, but then when you try to edit any of the child property fields you get the following error:
    ReferenceError: Error #1069: Property CategoryData.CategoryDescription not found on valueObjects.Category_type and there is no default value.
    I have looked up the error and I realise that it means that there is no value for CategoryData.CategoryDescription, but if I can display it why can i not edit it! What do I have to do to make this work?
    Anyway, here is the code, it shows the default bound datagrid, a second datagrid with the hack applied, and a third hacked datagrid with an itemRenderer and itemEditor on the number columns
    Can you please take a look and tell me what I did wrong, well more to the point, if there is a doc that explains how to deal with XML like this then please point me at it.
    I did try changing the return type for ANY of the columns, but this fails, I also tried a labelFunction, but again I can get the [object CategoryData_type] to display, but I get the null reference exception as the datagrid loads if I try to get to the child props.
    Here is the Flex code:
    <?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"
          xmlns:categories="services.categories.*"
          minWidth="955" minHeight="600">
    <fx:Script>
      <![CDATA[
       import mx.controls.Alert;
       import mx.events.FlexEvent;
       protected function dataGrid_creationCompleteHandler(event:FlexEvent):void
        getDataResult.token = categories.getData();
       protected function lftest(item:Object, column:GridColumn):String
        var t:String = item.CategoryData;
        return t;
      ]]>
    </fx:Script>
    <fx:Declarations>
      <s:CallResponder id="getDataResult"/>
      <categories:Categories id="categories"
              fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)"
              showBusyCursor="true"/>
      <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <s:DataGrid id="dataGrid" x="10" y="10" width="684"
        creationComplete="dataGrid_creationCompleteHandler(event)" editable="true"
        requestedRowCount="4">
      <s:columns>
       <s:ArrayList>
        <s:GridColumn width="100" dataField="CategoryName" headerText="CategoryName"></s:GridColumn>
        <s:GridColumn width="100" dataField="CategoryLink" headerText="CategoryLink"></s:GridColumn>
        <s:GridColumn width="180" dataField="CategoryData" headerText="CategoryData"></s:GridColumn>
       </s:ArrayList>
      </s:columns>
      <s:typicalItem>
       <fx:Object CategoryData="CategoryData1" CategoryLink="CategoryLink1"
            CategoryName="CategoryName1"></fx:Object>
      </s:typicalItem>
      <s:AsyncListView list="{getDataResult.lastResult}"/>
    </s:DataGrid>
    <s:DataGrid id="dataGrid2" x="10" y="147" width="684" editable="true" requestedRowCount="4">
      <s:columns>
       <s:ArrayList>
        <s:GridColumn width="100" dataField="CategoryName" headerText="CategoryName"></s:GridColumn>
        <s:GridColumn width="100" dataField="CategoryLink" headerText="CategoryLink"></s:GridColumn>
        <s:GridColumn width="180" dataField="CategoryData" headerText="CategoryData"></s:GridColumn>
        <s:GridColumn dataField="CategoryData.CategoryDescription" headerText="Desc"></s:GridColumn>
        <s:GridColumn dataField="CategoryData.CategoryHeader" headerText="Head"></s:GridColumn>
        <s:GridColumn dataField="CategoryData.CategoryNumber" headerText="Num"></s:GridColumn>
       </s:ArrayList>
      </s:columns>
      <s:typicalItem>
       <fx:Object CategoryData="CategoryData1" CategoryLink="CategoryLink1"
            CategoryName="CategoryName1"></fx:Object>
      </s:typicalItem>
      <s:AsyncListView list="{getDataResult.lastResult}"/>
    </s:DataGrid>
    <s:DataGrid id="dataGrid3" x="10" y="284" width="684" editable="true" requestedRowCount="4">
      <s:columns>
       <s:ArrayList>
        <s:GridColumn width="100" dataField="CategoryName" headerText="CategoryName"></s:GridColumn>
        <s:GridColumn width="100" dataField="CategoryLink" headerText="CategoryLink"></s:GridColumn>
        <s:GridColumn width="180" dataField="CategoryData" headerText="CategoryData"></s:GridColumn>
        <s:GridColumn headerText="Number">
         <s:itemRenderer>
          <fx:Component>
           <s:GridItemRenderer>
            <s:NumericStepper value="{data.CategoryData.CategoryNumber}" />
           </s:GridItemRenderer>
          </fx:Component>
         </s:itemRenderer>
        </s:GridColumn>
        <s:GridColumn dataField="CategoryData.CategoryNumber" headerText="Number">
         <s:itemEditor>
          <fx:Component>
           <s:GridItemEditor>
            <s:NumericStepper value="{data.CategoryData.CategoryNumber}" />
           </s:GridItemEditor>
          </fx:Component>
         </s:itemEditor>
        </s:GridColumn>
       </s:ArrayList>
      </s:columns>
      <s:typicalItem>
       <fx:Object CategoryData="CategoryData1" CategoryLink="CategoryLink1"
            CategoryName="CategoryName1"></fx:Object>
      </s:typicalItem>
      <s:AsyncListView list="{getDataResult.lastResult}"/>
    </s:DataGrid>
    </s:Application>
    All and any advice welcome.
    Shaine

    One last try, I now know for sure that the data in the file is loading, I created a labelFunction on the CategoryDescription column that looks like this:
    protected function dispData(item:Object, column:GridColumn):String
        var t:Object = item.CategoryData;
        var s:String = item.CategoryData.CategoryDescription;
        return s;
    Because it returns s, which I now know is undefined (which is the problem!) I managed to get a debug output. As you can see the value of t is the categorydata, and it appears to have the 3 values I need to get access to, but I have no idea how to do this. I also changed the function to read:
    protected function dispData(item:Object, column:GridColumn):String
    var t:Object = item.CategoryData;
    var s:String = t.CategoryDescription;
    return s;
    But this undefines t and s! Very confused
    this test2 (@d2e10a1)
    item valueObjects.Category_type (@91f8a51)
    [inherited]
    column spark.components.gridClasses.GridColumn (@d61b239)
    t valueObjects.CategoryData_type (@91f8c11)
    [inherited]
      _cacheInitialized_isValid false
      CategoryDescription "This is the description of category 1"
      CategoryHeader "My Category Title 1"
      CategoryNumber "1"
      _changedObjects mx.collections.ArrayCollection (@d5d9e41)
      _changeWatcherArray [] (@cfab061)
      _dminternal_model _CategoryData_typeEntityMetadata (@d4286a1)
      _doValidationCacheOfCategoryDescription null
      _doValidationCacheOfCategoryHeader null
      _doValidationCacheOfCategoryNumber null
      _doValidationLastValOfCategoryDescription null
      _doValidationLastValOfCategoryHeader null
      _doValidationLastValOfCategoryNumber null
      _internal_CategoryDescription "This is the description of category 1"
      _internal_CategoryHeader "My Category Title 1"
      _internal_CategoryNumber "1"
      _invalidConstraints [] (@ca50fd9)
      invalidConstraints_der <setter>
      _isValid false
      isValid_der <setter>
      managingService <setter>
      _managingService null
      _model _CategoryData_typeEntityMetadata (@d4286a1)
      _validationFailureMessages [] (@cfab0b1)
    s undefined
    As always all help welcome.
    Shaine
    Message was edited after a oops moment by: ProcessEndNow

  • Datagrid itemRenderer custom component formatting

    OK, so this is my first attempt at an itenRenderer. This works below, but I have to imagine there is an easier way. There is also a problem with below, where the changed field (datafield=side) after the itemRenderer is applied, the text is all out of format, and there is a kind of selection on row one of that column. Obvisouly, though the translation is happening, I'm either overidding the wrong thing, or I'm doing something totally wrong.
    Goal..... Show in the datagrid, the three colums below from date provided from elsewhere. (This all works), but in the 'side' data it comes in, in raw form as either an 'a' or 'b' or 'both', and I'm trying to display that as something more user friendly. So when both is read it changes it to 'No'.
    Any help. This seems really easy, though I can't understanading hy my custom function screws with the cell selection, and formating?
    ---Main program---
    <mx:DataGrid x="10" y="9" width="199" height="147" id="gdimmer_checkChannel" dataProvider="{ current_rack.getItemAt(0).rackLevels }"
      change="dimmerCheckCurrentSelection(event);"
      sortableColumns="false"
      selectedIndex="{ current_rack.getItemAt(0).currentCheckIndex }" >
    <mx:columns>
      <mx:DataGridColumn headerText="UDN" dataField="udn"/>
      <mx:DataGridColumn headerText="DD" dataField="side" editable="false" itemRenderer="renderers.DataGridDDSide"/>
      <mx:DataGridColumn headerText="Circuit" dataField="circuit"/>
    </mx:columns>
    </mx:DataGrid>
    --- Component Below ---
    <?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">
    <s:Label id="lblData" text="{dataGridListData.label}" />
    <fx:Script>
    <![CDATA[
      override public function set data(value:Object):void
        if (value.side == 'both') { lblData.text = "  No" };
       if (value.side == 'a') { lblData.text = "  a" };
       if (value.side == 'b') { lblData.text = "  b" };
    ]]>
    </fx:Script>
    </s:MXDataGridItemRenderer>

    See the latest post on my blog.  You also need to set super.data in the data
    setter.
    Alex Harui
    Flex SDK Team
    Adobe System, Inc.
    http://blogs.adobe.com/aharui

  • Ellipsis (...) in dataGrid itemRenderer

    If you want a line of text in a datagrid cell to end with an ellipsis (...) when it's too long for its cell, you can set the column's item renderer to be "mx.control.Label" and that works. The entry looks like this:
    Here is my line of dat...
    But here's my problem.
    I have created my own item renderer which is an HBox containing an image and a label. But the label doesn't truncate with the ellipsis ... when the data is too long, it simply chops the end off the displayed text.
    So my question is this. How can I get the ellipsis ... to appear for the label in my item renderer? I'm using a datagrid with scaleable column widths so I can't set a fixed width on the label which would work, I know.
    Cheers,
    Neil

    Thanks for your suggestion.
    It didn't work but inspired me to play around with minWidth and maxWidth.
    What I eventually got to work was:
    maxWidth="
    {this.width-28}"
    ...on the Label in the HBox. I'm assuming that "this" here refers to the ItemRenderer.
    I had to put in the "-28" bit or it wouldn't do it. If you want more padding on the right of the ellipsis (so it doesn't hit the edge of the cell) increase the 28 to something higher. Use a lower value for less padding.
    Hope this helps someone else like it did me.
    Cheers,
    Neil

  • Problem with Datagrid itemrenderer with a Datagrid

    Hi all,
    I have this kind of a structure. I try to use a datagrid item renderer in a data grid column. However when I try to move rows inside the same datagrid I experience a problem. When my datagrid loads first it seems correct, but when I drag and drop a row in the same datagrid inner datagrids start to be drew in wrong rows. I checked the DB but there are no mistakes in DB records. Problem is with rendering. I suppose inner datagrids trying to draw to early or datagrid component is trying to reuse the itemrenderer. I could not find any solutions for that. Any help will be greatly appreciated..
    <mx:DataGridColumn width="130" editable="false"
              headerText="{resourceManager.getString('resources', 'acl.content')}">
              <mx:itemRenderer>
                   <mx:Component>
                        <ACLInnerDataGrid rowCount="3"     dragEnabled="true"     dropEnabled="false"
                        x="0" y="0"     editable="true" dragInitiatorId="catGrid"
                        filterGroupName="content" remoteDestination="zend"
                        remoteSource="ACLFilterParamService" showHeaders="false"
                        creationComplete="this.init();">
                             <columns>
                                  <mx:DataGridColumn dataField="id" editable="false" visible="false"/>
                                  <mx:DataGridColumn dataField="ruleId" editable="false" visible="false"/>
                                  <mx:DataGridColumn dataField="filterKey" editable="false" visible="false"/>
                                  <mx:DataGridColumn dataField="param" editable="false" visible="false"/>
                                  <mx:DataGridColumn dataField="name" editable="true"/>
                             </columns>     
                        </ACLInnerDataGrid>
                   </mx:Component>
              </mx:itemRenderer>
    </mx:DataGridColumn>
    Thanks in advance.

    I have attached the item renderer component source code.

  • DataGrid itemrenderer with switch statement

    Hi,
    I have datagrid control with this columns
    <mx:DataGrid id="dgvParagraphs" >
        <mx:columns>
            <mx:DataGridColumn dataField="type" headerText="Type"/>
            <mx:DataGridColumn dataField="title" headerText="Title"/>
            <mx:DataGridColumn dataField="content" visible="false"/>
        </mx:columns>
    </mx:DataGrid>
    Under type column I have values from 1 to 6. Each number presents type of content. I have icons for each type. I would like to show icon instead of just number. I know this can be done using itemrenderes but I don't know how to accomplish this.

    If this post answers your question or helps, please mark it as such.
    Greg Lafrance
    www.ChikaraDev.com
    Flex Development and Support Services
    You might see issues with this code during scrolling, as DataGrid recycles itemRenderers, but in that case the icon information must be in the data.
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
      <mx:Script>
        <![CDATA[
          public function getImageSource(item:Object):String{
            var retVal:String;
            switch(uint(item.type)){
              case 1:
                retVal = "black.png";
                break;
              case 2:
                retVal = "blue.png";
                break;
              case 3:
                retVal = "gray.png";
                break;
              case 4:
                retVal = "green.png";
                break;
              case 5:
                retVal = "purple.png";
                break;
              case 6:
                retVal = "red.png";
                break;
            trace(retVal);
            return retVal;
        ]]>
      </mx:Script>
      <mx:DataGrid id="dgvParagraphs" dataProvider="{dataXML..item}">
        <mx:columns>
          <mx:DataGridColumn dataField="type" headerText="Type" width="50">
            <mx:itemRenderer>
              <mx:Component>
                <mx:Image source="{outerDocument.getImageSource(data)}" horizontalAlign="center"/>
              </mx:Component>
            </mx:itemRenderer>
          </mx:DataGridColumn>
          <mx:DataGridColumn dataField="title" headerText="Title" width="100"/>
          <mx:DataGridColumn dataField="content" visible="false"/>
        </mx:columns>
      </mx:DataGrid>
      <mx:XML id="dataXML" xmlns="">
        <data>
          <item>
            <type>2</type>
            <title>My Title 1</title>
            <content>Content 1</content>       
          </item>
          <item>
            <type>5</type>
            <title>My Title 2</title>
            <content>Content 2</content>
          </item>
          <item>
            <type>3</type>
            <title>My Title 3</title>
            <content>Content 3</content>
          </item>
          <item>
            <type>1</type>
            <title>My Title 4</title>
            <content>Content 4</content>
          </item>
          <item>
            <type>4</type>
            <title>My Title 5</title>
            <content>Content 5</content>
          </item>
          <item>
            <type>6</type>
            <title>My Title 6</title>
            <content>Content 6</content>
          </item>
          <item>
            <type>2</type>
            <title>My Title 7</title>
            <content>Content 7</content>
          </item>
          <item>
            <type>1</type>
            <title>My Title 8</title>
            <content>Content 8</content>
          </item>
          <item>
            <type>4</type>
            <title>My Title 9</title>
            <content>Content 9</content>
          </item>
          <item>
            <type>5</type>
            <title>My Title 10</title>
            <content>Content 10</content>
          </item>
          <item>
            <type>2</type>
            <title>My Title 11</title>
            <content>Content 11</content>
          </item>
        </data>
      </mx:XML>
    </mx:Application>

  • Datagrid itemRenderer dynamic values

    While working on an application I came across the following
    problem. I've got a view with a datagrid, where I have several
    columns. Each column needs 2 values displayed beneath each other in
    one cell. You make an itemRenderer with 2 labels inside a VBox.
    Easy so far. However since this scenario repeats several times it
    seems counterproductive to make an itemRenderer for each cell. How
    can I make the text property for the labels change for each cell
    instead of being static in their values.
    Thx in advance.

    Your description of your requirements and your sample code do
    not paint a clear enough picture.
    Your dataProvider has 4 pieces of data: batchId,
    bookingNumber, valueDate, immsBranch. Your current itemRenderer
    references two of those pieces of data, and you say you want to
    reference the other two. You can do that easily like this:
    <mx:Label text="data.valueDate"/>
    <mx:Label text="data.immsBranch"/>
    A basic question: will your DataGrid have two rows for each
    set of 4 pieces of data? If so then I understand your problem. If
    not, then you must clarify exactly how and when you would like the
    4 pieces of data shown in your DataGrid.
    In any case, you probably need a Repeater, and then need to
    figure out how to get at the right data at the right time in the
    Repeater.
    See this FB 3 help topic and its sub-topics:
    Dynamically Repeating Controls and Containers
    Also search for this in the FB3 help to see the API:
    mx.core.Repeater
    You can define a listener for the Repeater for the Repeat
    event to specify processing for each iteration of the
    repeater.

  • Datagrid itemrenderer fails - data interchanged between cells

    Hi,
    I have the follwing datagrid, the 2nd column of which calls an itemrenderer...
    <mx:DataGrid x="10" y="10" width="478" height="209" headerHeight="0" id="dgFollowUp"  verticalAlign="top" variableRowHeight="true" wordWrap="true" borderStyle="none" borderThickness="0" color="#000000" useRollOver="false" selectionColor="#FFFFFF">
            <mx:columns>
                <mx:DataGridColumn dataField="sel"  width="30"  textAlign="left"  sortable="false"   id="colsel" headerText="" >
                    <mx:itemRenderer>
                        <mx:Component>
                            <mx:CheckBox paddingTop="2"  paddingLeft="10" selected="{data.sel}"
                                change="{data.sel = this.selected;}" click="parentDocument.changeIsSelectedStatus(this.selected, data)"/>
                        </mx:Component>
                    </mx:itemRenderer>
                </mx:DataGridColumn>
                <mx:DataGridColumn headerText="" dataField="{data.FDOCNO_CONCAT}" itemRenderer="dgFollowupTextRenderer"/>
            </mx:columns>
        </mx:DataGrid>
    ...And here it is:
    <?xml version="1.0"?>
    <!-- itemRenderers\list\myComponents\RendererState.mxml -->
        <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()" height="100%">   
            <mx:Script>
                <![CDATA[
                    import mx.states.SetProperty;
                    import mx.controls.Text;
                    import mx.controls.Label;
                    import mx.managers.PopUpManager;
                  private function init():void
                      var myLabel:Text = new Text;
                      var myText:String = data.FDOCNO_CONCAT;
                      var myLink:Label;
                      var myVboxIn:VBox;
                      myLabel.text = myText;                  
                      myLabel.width = 430;      
                      myVbox.addChild(myLabel);                
                      if (myText.length > 400)
                          myLink = new Label;
                          myLink.text = this.parentApplication.scn2LangXml.lastResult.followup.lblReadMore;
                          myLink.setStyle('color', 0x0000FF);
                          myLink.mouseChildren = false;
                          myLink.buttonMode = true;
                          myLink.useHandCursor = true;
                          myLink.addEventListener(MouseEvent.CLICK, callPopup);
                          myVbox.addChild(myLink);
                  public function callPopup(event:Event):void
                    var FollowUpDetailsPop:FollowUpDetails;            
                    var count:Number = data.counter;
                    var tmp:String = data.FDOCNO +' :\n'+data.DESCRIPTION + '\n' + data.COMMENTS;
                    FollowUpDetailsPop = FollowUpDetails(PopUpManager.createPopUp(this, FollowUpDetails, true));
                    PopUpManager.centerPopUp(FollowUpDetailsPop);        
                    FollowUpDetailsPop.text = tmp;       
                ]]>
            </mx:Script>
            <mx:VBox id="myVbox" height="100%"/>
        </mx:VBox>
    ...And here is the popup:
    <?xml version="1.0" encoding="utf-8"?>
    <mx:TitleWindow
        xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="absolute"
        width="400"
        height="300"
        showCloseButton="true"
        close="close()"
        title="{this.parentApplication.scn2LangXml.lastResult.followupdate.lblTitleDetails}"
        borderAlpha="1">
    <mx:Script>
        <![CDATA[
            import mx.managers.PopUpManager;
            [Bindable] var text:String;
            private function close():void
                 PopUpManager.removePopUp(this);
        ]]>
    </mx:Script>
        <mx:TextArea id="txtDetails" text="{text}" x="10" y="10" width="360" height="240" editable="false"/>
    </mx:TitleWindow>
    ...........Everything displays correctly and the popup functions well too.. The only problem is that when you scroll the initial datatagrid, you see data in the column, which calls the itemrenderer, being swapped between the rows. I have tried same on another example and 1) on sorting the column, the popup contains the wrong data and 2) if there are other columns, its only the one calling for itemrenderer which swaps data between its rows.
    Any help | Many thanks..

    Hi,
    I have the follwing datagrid, the 2nd column of which calls an itemrenderer...
    <mx:DataGrid x="10" y="10" width="478" height="209" headerHeight="0" id="dgFollowUp"  verticalAlign="top" variableRowHeight="true" wordWrap="true" borderStyle="none" borderThickness="0" color="#000000" useRollOver="false" selectionColor="#FFFFFF">
            <mx:columns>
                <mx:DataGridColumn dataField="sel"  width="30"  textAlign="left"  sortable="false"   id="colsel" headerText="" >
                    <mx:itemRenderer>
                        <mx:Component>
                            <mx:CheckBox paddingTop="2"  paddingLeft="10" selected="{data.sel}"
                                change="{data.sel = this.selected;}" click="parentDocument.changeIsSelectedStatus(this.selected, data)"/>
                        </mx:Component>
                    </mx:itemRenderer>
                </mx:DataGridColumn>
                <mx:DataGridColumn headerText="" dataField="{data.FDOCNO_CONCAT}" itemRenderer="dgFollowupTextRenderer"/>
            </mx:columns>
        </mx:DataGrid>
    ...And here it is:
    <?xml version="1.0"?>
    <!-- itemRenderers\list\myComponents\RendererState.mxml -->
        <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()" height="100%">   
            <mx:Script>
                <![CDATA[
                    import mx.states.SetProperty;
                    import mx.controls.Text;
                    import mx.controls.Label;
                    import mx.managers.PopUpManager;
                  private function init():void
                      var myLabel:Text = new Text;
                      var myText:String = data.FDOCNO_CONCAT;
                      var myLink:Label;
                      var myVboxIn:VBox;
                      myLabel.text = myText;                  
                      myLabel.width = 430;      
                      myVbox.addChild(myLabel);                
                      if (myText.length > 400)
                          myLink = new Label;
                          myLink.text = this.parentApplication.scn2LangXml.lastResult.followup.lblReadMore;
                          myLink.setStyle('color', 0x0000FF);
                          myLink.mouseChildren = false;
                          myLink.buttonMode = true;
                          myLink.useHandCursor = true;
                          myLink.addEventListener(MouseEvent.CLICK, callPopup);
                          myVbox.addChild(myLink);
                  public function callPopup(event:Event):void
                    var FollowUpDetailsPop:FollowUpDetails;            
                    var count:Number = data.counter;
                    var tmp:String = data.FDOCNO +' :\n'+data.DESCRIPTION + '\n' + data.COMMENTS;
                    FollowUpDetailsPop = FollowUpDetails(PopUpManager.createPopUp(this, FollowUpDetails, true));
                    PopUpManager.centerPopUp(FollowUpDetailsPop);        
                    FollowUpDetailsPop.text = tmp;       
                ]]>
            </mx:Script>
            <mx:VBox id="myVbox" height="100%"/>
        </mx:VBox>
    ...And here is the popup:
    <?xml version="1.0" encoding="utf-8"?>
    <mx:TitleWindow
        xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="absolute"
        width="400"
        height="300"
        showCloseButton="true"
        close="close()"
        title="{this.parentApplication.scn2LangXml.lastResult.followupdate.lblTitleDetails}"
        borderAlpha="1">
    <mx:Script>
        <![CDATA[
            import mx.managers.PopUpManager;
            [Bindable] var text:String;
            private function close():void
                 PopUpManager.removePopUp(this);
        ]]>
    </mx:Script>
        <mx:TextArea id="txtDetails" text="{text}" x="10" y="10" width="360" height="240" editable="false"/>
    </mx:TitleWindow>
    ...........Everything displays correctly and the popup functions well too.. The only problem is that when you scroll the initial datatagrid, you see data in the column, which calls the itemrenderer, being swapped between the rows. I have tried same on another example and 1) on sorting the column, the popup contains the wrong data and 2) if there are other columns, its only the one calling for itemrenderer which swaps data between its rows.
    Any help | Many thanks..

  • DataGrid itemRenderer done in code?

    I've searched for info on how to implement itemRenderer for a
    DataGrid, and despite seeing some docs and examples, they're all
    very different from what I think I want, and what I think should
    also be possible.
    Here's what I want: for one column (called "alert"), I want
    to be able to programmatically display an appropriate image (or
    even just render a character, such as "X") based on the data value
    of that cell.
    I would think it should be something like this:
    <mx:Script>
    private function RenderAlert(... ? ) :String {
    if (data == "delayed") return "D"
    else if (data == "canceled") return "X"
    </mx:Script>
    <mx:DataGrid ...>
    <mx:columns>
    <mx:DataGridColumn headerText="Alert" dataField="alert"
    itemRenderer="RenderAlert"/>
    </mx:columns>
    </mx:DataGrid>
    So, if anyone can point me to an example like this, I'd be
    very appreciative. I'm really hoping it's possible, as all the
    other methods I've seen illustrated don't appear to handle the
    render decisions in code.
    Thanks!

    By default, I'm not exactly sure what each cell is.I'm sure
    if we dug into the docs somewhere it would tell us..
    I've always done any conditional stuff in my itemrenderer
    component.
    Specifically in the set data function which you should
    override:
    i.e the following is a snippet that sets a combobox
    itemrenderer in a datagrid. It gets the ID of the current object
    being rendered then looks it
    up in an arraycollection to get the "english/display name" of
    that ID then sets that as the selected item in the combo box
    override public function set data(value:Object):void {
    yy = this.parentApplication.AC_semesters;
    if ((value != null) && (yy != null) &&
    yy.length > 0) {
    a_course = Course(value);
    this.invalidateProperties();
    for (var i:int = 0; i < yy.length; i++)
    var firstItem:Object = yy.getItemAt(i);
    var myid:int = a_course.crs_semester;
    if (firstItem.sem_id == myid)
    cb3.selectedIndex = i;
    so in your case you could make up an itemrenderer component
    being a label, then in your set data function, have a conditional
    check to set the label.text = "X" if the value passed in is equal
    to whatever.
    Hope this helps...

  • DataGrid itemRenderer column problem

    I have searched high and low and have not found a solution so I'm hoping someone here can help me out.
    When I start up my application, my datagrid (one of the columns uses a itemrenderer) that column, displays everything but it spills / shows funky, then when I scroll some of them get fixed. I don't know exactly what causes this or how to fix it. The column I'm talking about is the "Like" column.
    If code is needed I will provide a pastebin link when requested, and I have attatched a screenshot of what the problem is.
    Any help / suggestions would be appreciated

    Upgrade to 3.4.
    Alex Harui
    Flex SDK Developer
    Adobe Systems Inc.
    Blog: http://blogs.adobe.com/aharui

  • Change one alternatingRowColor of a spark DataGrid ItemRenderer

    Hi,
    I try to find a way to change the alternatingRowColor of only one spark ItemRenderer. It depends on a property set in an item in the DataProvider and this property can change at the runtime.
    How do to this?
    Thx.

    Do you mean to say depending on item value in data provider it datagrid row color should change?
    If yes then following link can help to solve your issue:
    http://butterfliesandbugs.wordpress.com/2011/02/04/changing-the-background-color-of-a-row- using-itemrendererfunction/
    Thanks and Best regards,
    Pooja Kuber | [email protected] | www.infocepts.com

  • How to Get DataGrid ItemRenderer Controls?

    Dear, I want to get Controls (Radio Buttons) from DataGrid within itemRenderer on Item Click event.
    Can you give me a sample code?
    =====================================================
    <?xml version="1.0" encoding="utf-8"?>
    <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%">
        <mx:Script>
            <![CDATA[
                import mx.events.*;
                import mx.controls.Alert;
                private function P4R_Y_change(e:Event):void
                    Alert.show(e.toString());
                private function P4R_N_change(e:Event):void
                    Alert.show(e.toString());
                private function onItemClick_gvPendingForReceipt(e:ListEvent):void
                    // want to get radio buttons here
                   Alert.show((e.target as DataGrid).columns[e.columnIndex].toString());
            ]]>
        </mx:Script>
        <mx:Panel title="Pending for Receipt (NGO only)">
            <mx:DataGrid id="gvPendingForReceipt" itemClick="onItemClick_gvPendingForReceipt(event)">
                <mx:dataProvider>
                    <mx:Object Case_No="cn8385738" JS_Name="Peter Wong" Remarks="" >
                    </mx:Object>
                    <mx:Object Case_No="cn4428255" JS_Name="Mary Queen" Remarks="Referal from SWD Special team!!">
                    </mx:Object>       
                </mx:dataProvider>   
                <mx:columns>
                    <mx:DataGridColumn headerText="Case #" width="150" dataField="Case_No" >
                    </mx:DataGridColumn>
                    <mx:DataGridColumn headerText="Job Seeker Name" width="150" dataField="JS_Name" >
                    </mx:DataGridColumn>       
                    <mx:DataGridColumn headerText="Accept Case?" width="200" >
                        <mx:itemRenderer>
                            <mx:Component>
                                <mx:VBox>
                                    <mx:RadioButton id="rdoP4R_Y" label="Yes" group="{IsAccepted}" >
                                    </mx:RadioButton>
                                    <mx:RadioButton id="rdoP4R_N" label="No" group="{IsAccepted}" >
                                    </mx:RadioButton>       
                                    <mx:RadioButtonGroup id="IsAccepted">
                                    </mx:RadioButtonGroup>           
                                </mx:VBox>   
                            </mx:Component>
                        </mx:itemRenderer>
                    </mx:DataGridColumn>
                    <mx:DataGridColumn headerText="Remarks">
                        <mx:itemRenderer>
                            <mx:Component>
                                <mx:TextInput text="{data.Remarks}">
                                </mx:TextInput>
                            </mx:Component>
                        </mx:itemRenderer>
                    </mx:DataGridColumn>                       
                </mx:columns>   
            </mx:DataGrid>
        </mx:Panel>
        <mx:Panel title="Pending for Intake (NGO only)">
        </mx:Panel>
        <mx:Panel title="Active Case List (NGO/ Case Management">
        </mx:Panel>
    </mx:VBox>
    Regards,
    Man Pak Hong, Dave
    [email protected]
    Analyst Programmer.

    This code may help.
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="
    http://www.adobe.com/2006/mxml"
    width="100%">
    <mx:Script>
    <![CDATA[
    import mx.controls.DataGrid;
    import mx.events.ListEvent;
    [Bindable]
    private var nameStr:String;
    public function getName(event:ListEvent):void {
    var dg:DataGrid = DataGrid(event.target);
    nameStr = dg.selectedItem.cn;
    ]]>
    </mx:Script>
    <mx:ArrayCollection id="acEmaillist">
    <mx:Object>
    <mx:cn>Bob Smith</mx:cn>
    <mx:mail>[email protected]</mx:mail>
    </mx:Object>
    <mx:Object>
    <mx:cn>Ted Alan</mx:cn>
    <mx:mail>[email protected]</mx:mail>
    </mx:Object>
    <mx:Object>
    <mx:cn>Fred Tobs</mx:cn>
    <mx:mail>[email protected]</mx:mail>
    </mx:Object>
    </mx:ArrayCollection>
    <mx:DataGrid dataProvider="{acEmaillist}"
    itemClick="getName(event)">
    <mx:columns>
    <mx:DataGridColumn headerText="Full Name" dataField="cn"
    width="150"/>
    <mx:DataGridColumn headerText="Email" dataField="mail"
    width="150"/>
    </mx:columns>
    </mx:DataGrid>
    <mx:Label text="{nameStr}"/>
    </mx:Application>

Maybe you are looking for