Oh yeah. I just remembered my real problem, which looks like a bug in flex.
ListEvent.columnIndex ignores invisible columns. So if column 0 is invisible, then column 1 will have an index of "0." However, AdvancedDataGrid.columns knows about invisible columns. Is there any way to fix this, other than looping through and figuring out which columns are visible? This code always shows the wrong result on a click: <mx:AdvancedDataGrid id="grid" itemClick="OnClick(event)"> <mx:Script> <![CDATA[ import mx.collections.ArrayCollection; import mx.controls.Alert; import mx.events.ListEvent; [Bindable] public var gridData:ArrayCollection = new ArrayCollection ([{field0:"0", field1:"1"}]); private function OnClick(event:ListEvent):void { Alert.show(grid.columns[event.columnIndex].dataField); } ]]> </mx:Script> <mx:dataProvider> <mx:HierarchicalData source="{gridData}"/> </mx:dataProvider> <mx:columns> <mx:AdvancedDataGridColumn width="20" visible="false" dataField="field0"/> <mx:AdvancedDataGridColumn dataField="field1" width="100"/> </mx:columns> </mx:AdvancedDataGrid>