Hi Alex:

Switching to AS, avoiding view states, and using the source for ListItemDataRenderer were all very helpful tips. The DataGrid layout stack overflow problem is now avoided entirely and my interface is a little more snappy.
My minimal working implementation is copied below for reference.

Thanks for your help,
Jason
-----
package views.renderers {

    import flash.display.DisplayObject;
    import flash.events.MouseEvent;

    import mx.controls.Button;
    import mx.controls.DataGrid;
    import mx.controls.dataGridClasses.DataGridListData;
    import mx.controls.listClasses.BaseListData;
    import mx.controls.listClasses.IDropInListItemRenderer;
    import mx.controls.listClasses.IListItemRenderer;
    import mx.core.IButton;
    import mx.core.IUITextField;
    import mx.core.UIComponent;
    import mx.core.UITextField;
    import mx.events.FlexEvent;

public class TestRenderer3 extends UIComponent implements IListItemRenderer, IDropInListItemRenderer {

        private const linkMethodPat:RegExp = /(ht|f)tp(s?):/i;

        private var _data:Object;
        private var _listData:DataGridListData;

        protected var _mode:String;
        protected var _label:IUITextField;
        protected var _linkButton:Button;

        public function TestRenderer3() {
            super();
            this._mode = "label";
        }

        [Bindable("dataChange")]
        public function get data():Object {
            return _data;
        }

        public function set data(newData:Object):void {
            this._data = newData;
            this._mode = isLink(String(data.value)) ? "link" : "label";
            invalidateProperties();
            dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
        }

        public function get listData():BaseListData {
            return _listData;
        }

        public function set listData(value:BaseListData):void {
            _listData = DataGridListData(value);
        }

        override protected function createChildren():void {
            super.createChildren();
            addChild(DisplayObject(getLabel()));
        }

        override protected function commitProperties():void {
            super.commitProperties();

var child:DisplayObject = DisplayObject(_mode == "label" ? _label : _linkButton);
            var childIndex:int = -1;

            if (hasFontContextChanged() && child != null) {
                childIndex = getChildIndex(child);
_linkButton.removeEventListener(MouseEvent.CLICK, notifyLink);
                this._label = null;
                this._linkButton = null;
            }

            removeChildAt(childIndex == -1 ? 0 : childIndex);
child = DisplayObject(_mode == "label" ? getLabel() : getButton());
            if (childIndex == -1)
                addChild(child);
            else
                addChildAt(child, childIndex);

            if (_data != null) {
                var txtVal:String = data.value as String;
                var isMultiline:Boolean = false;

                if (_listData) {
                    var dg:DataGrid = DataGrid(_listData.owner);

                    if (dg.variableRowHeight)
                        isMultiline = true;
                }

                if (_mode == "label") {
                    _label.text = txtVal ? txtVal : " ";
                    _label.multiline = isMultiline;
                } else {
                    var sepIndex:int = txtVal.indexOf("|");
_linkButton.label = (sepIndex >= 0) ? txtVal.substring(0, sepIndex) : "Link";
                    _linkButton.toolTip = txtVal.substring(sepIndex + 1);
                }
            } else {
                if (_mode == "label") {
                    _label.text = " ";
                } else {
                    _linkButton.label = "Link";
                    _linkButton.toolTip = null;
                }
            }

            invalidateSize();
        }

        override protected function measure():void {
            super.measure();

            if (_mode == "label") {
// guarantee that label width isn't zero because it messes up ability to measure.
                if (_label.width < 4 || _label.height < 4) {
                    _label.width = 4;
                    _label.height = 16;
                }

                if (isNaN(explicitWidth)) {
                    measuredWidth = _label.getExplicitOrMeasuredWidth();
                    measuredHeight = _label.getExplicitOrMeasuredHeight();
                } else {
                    measuredWidth = explicitWidth;
                    measuredHeight = _label.getExplicitOrMeasuredHeight();
_label.setActualSize(Math.max(explicitWidth - _label.getExplicitOrMeasuredWidth(), 4), measuredHeight);
                }
            } else {
                measuredWidth = _linkButton.getExplicitOrMeasuredWidth();
                measuredHeight = _linkButton.getExplicitOrMeasuredHeight();
            }

            measuredWidth += 5;
        }

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
            super.updateDisplayList(unscaledWidth, unscaledHeight);
            if (_mode == "label") {
                _label.setActualSize(unscaledWidth, measuredHeight);
            } else {
                _linkButton.setActualSize(measuredWidth, measuredHeight);
            }
            getChildAt(0).x = 5;
        }

        private function isLink(val:String):Boolean {
            var sepIndex:int = val.indexOf("|");
var attrVal:String = (sepIndex == -1) ? val : val.substring(sepIndex);

            // return true if value is URL with recognized method
return (attrVal.substring(0, attrVal.indexOf('//')).match(linkMethodPat) != null);
        }

        private function notifyLink(evt:MouseEvent):void {
            trace(_data.value); /* do something */
        }

        private function getLabel():IUITextField {
            if (!_label) {
this._label = IUITextField(createInFontContext(UITextField));
                _label.styleName = this;
                _label.selectable = true;
                _label.wordWrap = true;
            }

            return _label;
        }

        private function getButton():IButton {
            if (!_linkButton) {
                this._linkButton = Button(createInFontContext(Button));
                _linkButton.styleName = this;
_linkButton.addEventListener(MouseEvent.CLICK, notifyLink, false, 0, true);
            }

            return _linkButton;
        }
    }
}

On 7/15/2014 8:40 PM, Alex Harui wrote:
The fastest item renderers are usually written in AS.  See the
mx.controls.listClasses.ListItemRenderer (or
mx.controls.treeClasses.TreeItemRenderer).

Using states to control what widgets are visible is convenient, but also
expensive when simply setting the visible property would probably work in
this relatively simple scenario.

Try making a copy of one of these renderers and adding logic to
instantiate a Button if needed and set visible property on the Button or
internal TextField.  The TextField can handle multi-lines without as much
overhead as mx:Text.

-Alex

On 7/15/14 9:37 AM, "Jason Guild" <[email protected]> wrote:

Hi Alex:

I wondered if Box was more heavy than it should be, and I don't need
internal scroll bars on the itemRenderer itself at all.

I don't completely understand your thought to base the itemRenderer on
UIComponent though because it is not a container.
Could you please explain a little more how I can derive from UIComponent
and still effectively show either some kind of text component which
supports wrapping, or a button based on the data set on the itemRenderer?

Also, if mx:Text can be troublesome then can you suggest some other
component which supports wrapped text without "remembering its last
dimensions when measured"? Can I call invalidateDisplayList() or
validateNow() on the mx:Text to force it to re-measure when the data is
reset on the itemRenderer?

Thanks,
Jason

On 7/14/2014 9:10 PM, Alex Harui wrote:
Box is a pretty heavy base for an ItemRenderer.  It often wastes time
trying to compute whether scrollbars are needed.  Do you need
scrollbars?
If not, just use UIComponent.

Getting rid of the scrollbar computation should fix the problem, but if
you need scrollbars, then you have to make sure the computation is
stable,
as in it will return the same dimensions and thus whether scrollbars are
needed every time.  I'm guessing there is something about your renderer
that isn't stable.  mx:Text is often a contributor because of the way it
tries to remember its last dimensions when measured.

-Alex

On 7/14/14 5:57 PM, "Jason Guild" <[email protected]> wrote:

Hi All:

I've encountered an intermittant stack overflow problem displaying data
in an <mx:DataGrid> with two colunms, variableRowHeight="true", and a
custom itemRenderer applied to the second column. The item renderer for
the second column is based on <mx:Box> and has two view states. The
renderer is either in the "default" state and shows wrapped text, or in
a "link" state and the text is a hyperlink where an <mx:Button> to be
displayed instead.

My interface combines an <mx:Tree> beside an <mx:DataGrid> in a simple
master/detail configuration. Selecting an item in the tree resets the
grid dataProvider to show detailed data in the grid for the
corresponding tree item. The MXML for the interface is:

<mx:DividedBox id="resultsBox" width="100%" height="100%"
direction="horizontal">
      <mx:Tree id="resultTree" width="37%" height="100%" minWidth="100"
               styleName="layerTreeStyle"
               doubleClickEnabled="true"
               dataProvider="{ viewModel.results }"/>

      <mx:DataGrid id="attrGrid"
                   width="63%"
                   minWidth="125"
                   height="100%"
                   variableRowHeight="true"
                   draggableColumns="false"
                   sortableColumns="false"
                   editable="false">
          <mx:columns>
              <mx:DataGridColumn headerText="Field" dataField="field"
width="100"/>
              <mx:DataGridColumn headerText="Value" dataField="value"
width="125"
   itemRenderer="views.renderers.ResultSummaryValueRenderer"/>
          </mx:columns>
      </mx:DataGrid>
</mx:DividedBox>

The itemRenderer looks like this:

<?xml version="1.0" encoding="utf-8"?>
<mx:Box xmlns:fx="http://ns.adobe.com/mxml/2009";
          xmlns:mx="library://ns.adobe.com/flex/mx"
          implements="mx.core.IDataRenderer"
          width="100%"
          paddingLeft="5">

      <fx:Script>
          <![CDATA[
              import events.ResultLinkEvent;
              import mx.events.FlexEvent;
              import util.StringUtil;

              private const linkMethodPat:RegExp = /(ht|f)tp(s?):/i;

              private var _data:Object;

              [Bindable]
              private var displayVal:String = null;
              [Bindable]
              private var displayTip:String = null;

              [Bindable("dataChange")]
              public override function get data():Object {
                  return _data;
              }

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

                  if ((this._data = value) != null) {
                      if (isLink(value)) {
                          var valStr:String = data.value as String;
                          var sepIndex:int = valStr.indexOf("|");

                          this.displayVal = (sepIndex >= 0) ?
valStr.substring(0, sepIndex) : "Link";
                          this.displayTip = valStr.substring(sepIndex +
1);
                          this.currentState = "link";
                          return;
                      }

                      this.displayVal = ("value" in data &&
StringUtil.isNotBlank(data.value)) ? data.value : "[ no value ]";
                      this.displayTip = null;
                      this.currentState = "default";
                  }

                  dispatchEvent(new FlexEvent(FlexEvent.DATA_CHANGE));
              }

              private function isLink(attrInfo:Object):Boolean {
                  var sepIndex:int = attrInfo.value.indexOf("|");
                  var attrVal:String = (sepIndex == -1) ? attrInfo.value
: String(attrInfo.value).substring(sepIndex);

                  // return true if value is URL with recognized method
                  return (attrVal.substring(0,
attrVal.indexOf('//')).match(linkMethodPat) != null);
              }

              private function notifyLink(evt:MouseEvent):void {
                  var attrVal:String = data.value as String;
                  var sepIndex:int = attrVal.indexOf("|");

                  dispatchEvent(new ResultLinkEvent(
                      ResultLinkEvent.NAVIGATE,
                      data.field,
                      (sepIndex == -1) ? attrVal :
attrVal.substring(sepIndex + 1)
                      )
                  );
              }
          ]]>
      </fx:Script>

      <mx:states>
          <mx:State name="default"/>
          <mx:State name="link"/>
      </mx:states>

      <mx:Text id="attrTextCtrl" width="100%"
               text="{ displayVal }" selectable="true"
excludeFrom="link"/>
      <mx:Button id="attrButtonCtrl" label="{ displayVal }" toolTip="{
displayTip }"
                 click="notifyLink(event)" includeIn="link"/>
</mx:Box>

THE PROBLEM:
At first, when the tree selection changes the grid updates correctly
with new grid content and content is displayed in the second column as
either wrapped text or button as desired. But after an indeterminate
number of tree selection changes the player will freeze and result in
layout-related stack overflow of some kind.

The grid dataProvider always has about 6-12 rows, but the content
itself
varies somewhat in how many of those rows have text long enough to wrap
in the grid when tree selection changes. There is nearly always more
content than can be displayed vertically so the grid has to display a
scroll bar.

I wrote that the stack overflow is intermittant because it /seems/ that
if the grid content can be displayed completely without need for a
scroll bar then the problem does not occur. This is often the case when
there is only one row requiring text wrapping in the itemRenderer.

Anyway, stack traces I have (see below) indicate some kind of loop that
occurs attempting to validate and update the display lists of the grid
and the item renderer used until stack is exhausted. Seems like a bug.

Things I've tried to workaround the problem:
1. setting horizontalScrollPolicy="off" verticalScrollPolicy="off"
inside item renderer -> no effect, problem persists
2. basing itemRenderer on <s:MXDataGridItemRenderer/> with no layout
instead of <mx:Box/> -> problem persists
3. basing itemRenderer on <s:MXDataGridItemRenderer/> with
<s:HorizontalLayout/> instead of <mx:Box/> -> problem persists
4. setting variableRowHeight="false" on grid -> problem eliminated, but
long text is not wrapped (undesired visual outcome)
5. removing itemRenderer on second column -> problem eliminated, but is
effectively equivalent to variableRowHeight="false" because default
DataGridItemRenderer class never wraps text (undesired visual outcome).
6. Using a bare minimum itemRenderer based on <mx:Box/> involving only
<mx:Text> for wrapped text and no view states -> problem eliminated,
but
its not possible to display a button when content is a hyperlink.
7. Using an itemRenderer based on <mx:Box/> that avoids view states
altogether and tries to toggle which control is visible through setting
of visible and includeInLayout -> seemed better at first, but problem
persists
8. I also tried to extend DataGridColumn to conditionally use two
different itemRenderers based on the data, but
DataGridColumn.getItemRendererFactory() calls private methods I can't
override without bringing the whole class into my tree.

QUESTIONS:
1. Is there another way to write an item renderer with switching view
states in a way that is more robust?
2. How does <mx:DataGrid> compute the needed height for a row? Can I
break the chain somehow by implementing measure() or something?

Any help or suggestions would be greatly appreciated!!!
Jason

P.S. STACK TRACES:
itemRenderer based on mx:Box --
undefined
      at

mx.core::LayoutElementUIComponentUtils$/getPreferredUBoundsHeight()[/Use
rs

/aharui/flex-sdk-4.12.1/frameworks/projects/framework/src/mx/core/Layout
El
ementUIComponentUtils.as:92]
      at

mx.core::LayoutElementUIComponentUtils$/setLayoutBoundsSize()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/framework/src/mx/core/LayoutElemen
tU
IComponentUtils.as:510]
      at

mx.core::UIComponent/setLayoutBoundsSize()[/Users/aharui/flex-sdk-4.12.1
/f
rameworks/projects/framework/src/mx/core/UIComponent.as:14474]
      at

spark.layouts::BasicLayout/updateDisplayList()[/Users/aharui/flex-sdk-4.
12
.1/frameworks/projects/spark/src/spark/layouts/BasicLayout.as:508]
      at

spark.components.supportClasses::GroupBase/updateDisplayList()[/Users/ah
ar

ui/flex-sdk-4.12.1/frameworks/projects/spark/src/spark/components/suppor
tC
lasses/GroupBase.as:1302]
      at

spark.components::Group/updateDisplayList()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/spark/src/spark/components/Group.as:1179]
      at

mx.core::UIComponent/validateDisplayList()[/Users/aharui/flex-sdk-4.12.1
/f
rameworks/projects/framework/src/mx/core/UIComponent.as:9531]
      at

spark.components::Group/validateDisplayList()[/Users/aharui/flex-sdk-4.1
2.
1/frameworks/projects/spark/src/spark/components/Group.as:1101]
      at

mx.managers::LayoutManager/validateClient()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/framework/src/mx/managers/LayoutManager.as:1041]
      at

mx.core::UIComponent/validateNow()[/Users/aharui/flex-sdk-4.12.1/framewo
rk
s/projects/framework/src/mx/core/UIComponent.as:8609]
      at

mx.controls.dataGridClasses::DataGridBase/updateRendererDisplayList()[/U
se

rs/aharui/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGri
dC
lasses/DataGridBase.as:1344]
      at

mx.controls.dataGridClasses::DataGridBase/drawItem()[/Users/aharui/flex-
sd

k-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses/DataGrid
Ba
se.as:1309]
      at

mx.controls.dataGridClasses::DataGridBase/drawVisibleItem()[/Users/aharu
i/

flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses/D
at
aGridBase.as:1282]
      at

mx.controls.dataGridClasses::DataGridBase/makeRows()[/Users/aharui/flex-
sd

k-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses/DataGrid
Ba
se.as:818]
      at

mx.controls.dataGridClasses::DataGridBase/makeRowsAndColumns()[/Users/ah
ar

ui/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasse
s/
DataGridBase.as:702]
      at

mx.controls::DataGrid/makeRowsAndColumns()[/Users/aharui/flex-sdk-4.12.1
/f
rameworks/projects/mx/src/mx/controls/DataGrid.as:1882]
      at

mx.controls.listClasses::ListBase/makeRowsAndColumnsWithExtraRows()[/Use
rs

/aharui/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/listClass
es
/ListBase.as:1747]
      at

mx.controls.listClasses::ListBase/updateDisplayList()[/Users/aharui/flex
-s

dk-4.12.1/frameworks/projects/mx/src/mx/controls/listClasses/ListBase.as
:4
388]
      at

mx.controls.dataGridClasses::DataGridBase/updateDisplayList()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses
/D
ataGridBase.as:690]
      at

mx.controls::DataGrid/updateDisplayList()[/Users/aharui/flex-sdk-4.12.1/
fr
ameworks/projects/mx/src/mx/controls/DataGrid.as:1781]
      at

mx.core::ScrollControlBase/setScrollBarProperties()[/Users/aharui/flex-s
dk
-4.12.1/frameworks/projects/mx/src/mx/core/ScrollControlBase.as:1286]
      at

mx.controls::DataGrid/configureScrollBars()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/mx/src/mx/controls/DataGrid.as:2437]
      at

mx.controls.listClasses::ListBase/updateDisplayList()[/Users/aharui/flex
-s

dk-4.12.1/frameworks/projects/mx/src/mx/controls/listClasses/ListBase.as
:4
402]
      at

mx.controls.dataGridClasses::DataGridBase/updateDisplayList()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses
/D
ataGridBase.as:690]
      at

mx.controls::DataGrid/updateDisplayList()[/Users/aharui/flex-sdk-4.12.1/
fr
ameworks/projects/mx/src/mx/controls/DataGrid.as:1781]
      at

mx.core::ScrollControlBase/setScrollBarProperties()[/Users/aharui/flex-s
dk
-4.12.1/frameworks/projects/mx/src/mx/core/ScrollControlBase.as:1286]
      at

mx.controls::DataGrid/configureScrollBars()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/mx/src/mx/controls/DataGrid.as:2437]
      at

mx.controls.listClasses::ListBase/updateDisplayList()[/Users/aharui/flex
-s

dk-4.12.1/frameworks/projects/mx/src/mx/controls/listClasses/ListBase.as
:4
402]
      at

mx.controls.dataGridClasses::DataGridBase/updateDisplayList()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses
/D
ataGridBase.as:690]
      at

mx.controls::DataGrid/updateDisplayList()[/Users/aharui/flex-sdk-4.12.1/
fr
ameworks/projects/mx/src/mx/controls/DataGrid.as:1781]
      at

mx.core::ScrollControlBase/setScrollBarProperties()[/Users/aharui/flex-s
dk
-4.12.1/frameworks/projects/mx/src/mx/core/ScrollControlBase.as:1286]
      at

mx.controls::DataGrid/configureScrollBars()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/mx/src/mx/controls/DataGrid.as:2437]
      at

mx.controls.listClasses::ListBase/updateDisplayList()[/Users/aharui/flex
-s

dk-4.12.1/frameworks/projects/mx/src/mx/controls/listClasses/ListBase.as
:4
402]
      at

mx.controls.dataGridClasses::DataGridBase/updateDisplayList()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses
/D
ataGridBase.as:690]
      at

mx.controls::DataGrid/updateDisplayList()[/Users/aharui/flex-sdk-4.12.1/
fr
ameworks/projects/mx/src/mx/controls/DataGrid.as:1781]
      at

mx.core::ScrollControlBase/setScrollBarProperties()[/Users/aharui/flex-s
dk
-4.12.1/frameworks/projects/mx/src/mx/core/ScrollControlBase.as:1286]
      at

mx.controls::DataGrid/configureScrollBars()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/mx/src/mx/controls/DataGrid.as:2437]
      at

mx.controls.listClasses::ListBase/updateDisplayList()[/Users/aharui/flex
-s

dk-4.12.1/frameworks/projects/mx/src/mx/controls/listClasses/ListBase.as
:4
402]
      at

mx.controls.dataGridClasses::DataGridBase/updateDisplayList()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses
/D
ataGridBase.as:690]
      at

mx.controls::DataGrid/updateDisplayList()[/Users/aharui/flex-sdk-4.12.1/
fr
ameworks/projects/mx/src/mx/controls/DataGrid.as:1781]
      at

mx.core::ScrollControlBase/setScrollBarProperties()[/Users/aharui/flex-s
dk
-4.12.1/frameworks/projects/mx/src/mx/core/ScrollControlBase.as:1286]
      at

mx.controls::DataGrid/configureScrollBars()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/mx/src/mx/controls/DataGrid.as:2437]
      at

mx.controls.listClasses::ListBase/updateDisplayList()[/Users/aharui/flex
-s

dk-4.12.1/frameworks/projects/mx/src/mx/controls/listClasses/ListBase.as
:4
402]
      at

mx.controls.dataGridClasses::DataGridBase/updateDisplayList()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses
/D
ataGridBase.as:690]
      at

mx.controls::DataGrid/updateDisplayList()[/Users/aharui/flex-sdk-4.12.1/
fr
ameworks/projects/mx/src/mx/controls/DataGrid.as:1781]
      at

mx.core::ScrollControlBase/setScrollBarProperties()[/Users/aharui/flex-s
dk
-4.12.1/frameworks/projects/mx/src/mx/core/ScrollControlBase.as:1286]
      at

mx.controls::DataGrid/configureScrollBars()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/mx/src/mx/controls/DataGrid.as:2437]
      at

mx.controls.listClasses::ListBase/updateDisplayList()[/Users/aharui/flex
-s

dk-4.12.1/frameworks/projects/mx/src/mx/controls/listClasses/ListBase.as
:4
402]
      at

mx.controls.dataGridClasses::DataGridBase/updateDisplayList()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses
/D
ataGridBase.as:690]
      at

mx.controls::DataGrid/updateDisplayList()[/Users/aharui/flex-sdk-4.12.1/
fr
ameworks/projects/mx/src/mx/controls/DataGrid.as:1781]
      at

mx.core::ScrollControlBase/setScrollBarProperties()[/Users/aharui/flex-s
dk
-4.12.1/frameworks/projects/mx/src/mx/core/ScrollControlBase.as:1286]
      at

mx.controls::DataGrid/configureScrollBars()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/mx/src/mx/controls/DataGrid.as:2437]
      at

mx.controls.listClasses::ListBase/updateDisplayList()[/Users/aharui/flex
-s

dk-4.12.1/frameworks/projects/mx/src/mx/controls/listClasses/ListBase.as
:4
402]
      at

mx.controls.dataGridClasses::DataGridBase/updateDisplayList()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses
/D
ataGridBase.as:690]
      at

mx.controls::DataGrid/updateDisplayList()[/Users/aharui/flex-sdk-4.12.1/
fr
ameworks/projects/mx/src/mx/controls/DataGrid.as:1781]
      at

mx.core::ScrollControlBase/setScrollBarProperties()[/Users/aharui/flex-s
dk
-4.12.1/frameworks/projects/mx/src/mx/core/ScrollControlBase.as:1286]
      at

mx.controls::DataGrid/configureScrollBars()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/mx/src/mx/controls/DataGrid.as:2437]
      at

mx.controls.listClasses::ListBase/updateDisplayList()[/Users/aharui/flex
-s

dk-4.12.1/frameworks/projects/mx/src/mx/controls/listClasses/ListBase.as
:4
402]
      at

mx.controls.dataGridClasses::DataGridBase/updateDisplayList()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses
/D
ataGridBase.as:690]
      at

mx.controls::DataGrid/updateDisplayList()[/Users/aharui/flex-sdk-4.12.1/
fr
ameworks/projects/mx/src/mx/controls/DataGrid.as:1781]
      at

mx.core::ScrollControlBase/setScrollBarProperties()[/Users/aharui/flex-s
dk
-4.12.1/frameworks/projects/mx/src/mx/core/ScrollControlBase.as:1286]
      at

mx.controls::DataGrid/configureScrollBars()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/mx/src/mx/controls/DataGrid.as:2437]
      at

mx.controls.listClasses::ListBase/updateDisplayList()[/Users/aharui/flex
-s

dk-4.12.1/frameworks/projects/mx/src/mx/controls/listClasses/ListBase.as
:4
402]
      at

mx.controls.dataGridClasses::DataGridBase/updateDisplayList()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses
/D
ataGridBase.as:690]

itemRenderer based on s:MXDataGridItemRenderer:
undefined
      at

mx.managers::LayoutManager/invalidateDisplayList()[/Users/aharui/flex-sd
k-

4.12.1/frameworks/projects/framework/src/mx/managers/LayoutManager.as:55
6]
      at

mx.core::UIComponent/invalidateDisplayList()[/Users/aharui/flex-sdk-4.12
.1
/frameworks/projects/framework/src/mx/core/UIComponent.as:8433]
      at

mx.core::UIComponent/setActualSize()[/Users/aharui/flex-sdk-4.12.1/frame
wo
rks/projects/framework/src/mx/core/UIComponent.as:10250]
      at

mx.core::LayoutElementUIComponentUtils$/setLayoutBoundsSize()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/framework/src/mx/core/LayoutElemen
tU
IComponentUtils.as:519]
      at

mx.core::UIComponent/setLayoutBoundsSize()[/Users/aharui/flex-sdk-4.12.1
/f
rameworks/projects/framework/src/mx/core/UIComponent.as:14474]
      at

spark.layouts::BasicLayout/updateDisplayList()[/Users/aharui/flex-sdk-4.
12
.1/frameworks/projects/spark/src/spark/layouts/BasicLayout.as:508]
      at

spark.components.supportClasses::GroupBase/updateDisplayList()[/Users/ah
ar

ui/flex-sdk-4.12.1/frameworks/projects/spark/src/spark/components/suppor
tC
lasses/GroupBase.as:1302]
      at

spark.components::Group/updateDisplayList()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/spark/src/spark/components/Group.as:1179]
      at

mx.core::UIComponent/validateDisplayList()[/Users/aharui/flex-sdk-4.12.1
/f
rameworks/projects/framework/src/mx/core/UIComponent.as:9531]
      at

spark.components::Group/validateDisplayList()[/Users/aharui/flex-sdk-4.1
2.
1/frameworks/projects/spark/src/spark/components/Group.as:1101]
      at

mx.managers::LayoutManager/validateClient()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/framework/src/mx/managers/LayoutManager.as:1041]
      at

mx.core::UIComponent/validateNow()[/Users/aharui/flex-sdk-4.12.1/framewo
rk
s/projects/framework/src/mx/core/UIComponent.as:8609]
      at

mx.controls.dataGridClasses::DataGridBase/updateRendererDisplayList()[/U
se

rs/aharui/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGri
dC
lasses/DataGridBase.as:1344]
      at

mx.controls.dataGridClasses::DataGridBase/drawItem()[/Users/aharui/flex-
sd

k-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses/DataGrid
Ba
se.as:1309]
      at

mx.controls.dataGridClasses::DataGridBase/drawVisibleItem()[/Users/aharu
i/

flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses/D
at
aGridBase.as:1282]
      at

mx.controls.dataGridClasses::DataGridBase/makeRows()[/Users/aharui/flex-
sd

k-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses/DataGrid
Ba
se.as:818]
      at

mx.controls.dataGridClasses::DataGridBase/makeRowsAndColumns()[/Users/ah
ar

ui/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasse
s/
DataGridBase.as:702]
      at

mx.controls::DataGrid/makeRowsAndColumns()[/Users/aharui/flex-sdk-4.12.1
/f
rameworks/projects/mx/src/mx/controls/DataGrid.as:1882]
      at

mx.controls.listClasses::ListBase/makeRowsAndColumnsWithExtraRows()[/Use
rs

/aharui/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/listClass
es
/ListBase.as:1747]
      at

mx.controls.listClasses::ListBase/updateDisplayList()[/Users/aharui/flex
-s

dk-4.12.1/frameworks/projects/mx/src/mx/controls/listClasses/ListBase.as
:4
388]
      at

mx.controls.dataGridClasses::DataGridBase/updateDisplayList()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses
/D
ataGridBase.as:690]
      at

mx.controls::DataGrid/updateDisplayList()[/Users/aharui/flex-sdk-4.12.1/
fr
ameworks/projects/mx/src/mx/controls/DataGrid.as:1781]
      at

mx.core::ScrollControlBase/setScrollBarProperties()[/Users/aharui/flex-s
dk
-4.12.1/frameworks/projects/mx/src/mx/core/ScrollControlBase.as:1286]
      at

mx.controls::DataGrid/configureScrollBars()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/mx/src/mx/controls/DataGrid.as:2437]
      at

mx.controls.listClasses::ListBase/updateDisplayList()[/Users/aharui/flex
-s

dk-4.12.1/frameworks/projects/mx/src/mx/controls/listClasses/ListBase.as
:4
402]
      at

mx.controls.dataGridClasses::DataGridBase/updateDisplayList()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses
/D
ataGridBase.as:690]
      at

mx.controls::DataGrid/updateDisplayList()[/Users/aharui/flex-sdk-4.12.1/
fr
ameworks/projects/mx/src/mx/controls/DataGrid.as:1781]
      at

mx.core::ScrollControlBase/setScrollBarProperties()[/Users/aharui/flex-s
dk
-4.12.1/frameworks/projects/mx/src/mx/core/ScrollControlBase.as:1286]
      at

mx.controls::DataGrid/configureScrollBars()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/mx/src/mx/controls/DataGrid.as:2437]
      at

mx.controls.listClasses::ListBase/updateDisplayList()[/Users/aharui/flex
-s

dk-4.12.1/frameworks/projects/mx/src/mx/controls/listClasses/ListBase.as
:4
402]
      at

mx.controls.dataGridClasses::DataGridBase/updateDisplayList()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses
/D
ataGridBase.as:690]
      at

mx.controls::DataGrid/updateDisplayList()[/Users/aharui/flex-sdk-4.12.1/
fr
ameworks/projects/mx/src/mx/controls/DataGrid.as:1781]
      at

mx.core::ScrollControlBase/setScrollBarProperties()[/Users/aharui/flex-s
dk
-4.12.1/frameworks/projects/mx/src/mx/core/ScrollControlBase.as:1286]
      at

mx.controls::DataGrid/configureScrollBars()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/mx/src/mx/controls/DataGrid.as:2437]
      at

mx.controls.listClasses::ListBase/updateDisplayList()[/Users/aharui/flex
-s

dk-4.12.1/frameworks/projects/mx/src/mx/controls/listClasses/ListBase.as
:4
402]
      at

mx.controls.dataGridClasses::DataGridBase/updateDisplayList()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses
/D
ataGridBase.as:690]
      at

mx.controls::DataGrid/updateDisplayList()[/Users/aharui/flex-sdk-4.12.1/
fr
ameworks/projects/mx/src/mx/controls/DataGrid.as:1781]
      at

mx.core::ScrollControlBase/setScrollBarProperties()[/Users/aharui/flex-s
dk
-4.12.1/frameworks/projects/mx/src/mx/core/ScrollControlBase.as:1286]
      at

mx.controls::DataGrid/configureScrollBars()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/mx/src/mx/controls/DataGrid.as:2437]
      at

mx.controls.listClasses::ListBase/updateDisplayList()[/Users/aharui/flex
-s

dk-4.12.1/frameworks/projects/mx/src/mx/controls/listClasses/ListBase.as
:4
402]
      at

mx.controls.dataGridClasses::DataGridBase/updateDisplayList()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses
/D
ataGridBase.as:690]
      at

mx.controls::DataGrid/updateDisplayList()[/Users/aharui/flex-sdk-4.12.1/
fr
ameworks/projects/mx/src/mx/controls/DataGrid.as:1781]
      at

mx.core::ScrollControlBase/setScrollBarProperties()[/Users/aharui/flex-s
dk
-4.12.1/frameworks/projects/mx/src/mx/core/ScrollControlBase.as:1286]
      at

mx.controls::DataGrid/configureScrollBars()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/mx/src/mx/controls/DataGrid.as:2437]
      at

mx.controls.listClasses::ListBase/updateDisplayList()[/Users/aharui/flex
-s

dk-4.12.1/frameworks/projects/mx/src/mx/controls/listClasses/ListBase.as
:4
402]
      at

mx.controls.dataGridClasses::DataGridBase/updateDisplayList()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses
/D
ataGridBase.as:690]
      at

mx.controls::DataGrid/updateDisplayList()[/Users/aharui/flex-sdk-4.12.1/
fr
ameworks/projects/mx/src/mx/controls/DataGrid.as:1781]
      at

mx.core::ScrollControlBase/setScrollBarProperties()[/Users/aharui/flex-s
dk
-4.12.1/frameworks/projects/mx/src/mx/core/ScrollControlBase.as:1286]
      at

mx.controls::DataGrid/configureScrollBars()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/mx/src/mx/controls/DataGrid.as:2437]
      at

mx.controls.listClasses::ListBase/updateDisplayList()[/Users/aharui/flex
-s

dk-4.12.1/frameworks/projects/mx/src/mx/controls/listClasses/ListBase.as
:4
402]
      at

mx.controls.dataGridClasses::DataGridBase/updateDisplayList()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses
/D
ataGridBase.as:690]
      at

mx.controls::DataGrid/updateDisplayList()[/Users/aharui/flex-sdk-4.12.1/
fr
ameworks/projects/mx/src/mx/controls/DataGrid.as:1781]
      at

mx.core::ScrollControlBase/setScrollBarProperties()[/Users/aharui/flex-s
dk
-4.12.1/frameworks/projects/mx/src/mx/core/ScrollControlBase.as:1286]
      at

mx.controls::DataGrid/configureScrollBars()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/mx/src/mx/controls/DataGrid.as:2437]
      at

mx.controls.listClasses::ListBase/updateDisplayList()[/Users/aharui/flex
-s

dk-4.12.1/frameworks/projects/mx/src/mx/controls/listClasses/ListBase.as
:4
402]
      at

mx.controls.dataGridClasses::DataGridBase/updateDisplayList()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses
/D
ataGridBase.as:690]
      at

mx.controls::DataGrid/updateDisplayList()[/Users/aharui/flex-sdk-4.12.1/
fr
ameworks/projects/mx/src/mx/controls/DataGrid.as:1781]
      at

mx.core::ScrollControlBase/setScrollBarProperties()[/Users/aharui/flex-s
dk
-4.12.1/frameworks/projects/mx/src/mx/core/ScrollControlBase.as:1286]
      at

mx.controls::DataGrid/configureScrollBars()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/mx/src/mx/controls/DataGrid.as:2437]
      at

mx.controls.listClasses::ListBase/updateDisplayList()[/Users/aharui/flex
-s

dk-4.12.1/frameworks/projects/mx/src/mx/controls/listClasses/ListBase.as
:4
402]
      at

mx.controls.dataGridClasses::DataGridBase/updateDisplayList()[/Users/aha
ru

i/flex-sdk-4.12.1/frameworks/projects/mx/src/mx/controls/dataGridClasses
/D
ataGridBase.as:690]
      at

mx.controls::DataGrid/updateDisplayList()[/Users/aharui/flex-sdk-4.12.1/
fr
ameworks/projects/mx/src/mx/controls/DataGrid.as:1781]
      at

mx.core::ScrollControlBase/setScrollBarProperties()[/Users/aharui/flex-s
dk
-4.12.1/frameworks/projects/mx/src/mx/core/ScrollControlBase.as:1286]
      at

mx.controls::DataGrid/configureScrollBars()[/Users/aharui/flex-sdk-4.12.
1/
frameworks/projects/mx/src/mx/controls/DataGrid.as:2437]


Reply via email to