In one of my projects, I run an IdentifyTask on the visible layers in a map service. The results from each layer are put into a grid on a separate tab. This is built on the fly, since the user has the ability to turn on different layers and since each layer has different attributes. Each grid has the event handlers added to them so that rolling over or clicking a cell will highlight the feature on the map.This is the code I use to build the tabs and insert them into the infoWindow.
protected function MainMap_mapClickHandler(event:MapMouseEvent):void
{
var identifyParams:IdentifyParameters = new IdentifyParameters();
var clickGraphic:Graphic = new Graphic(event.mapPoint, clickPointSymbol);
identifyParams.returnGeometry = true;
identifyParams.tolerance = 5;
identifyParams.width = MainMap.width;
identifyParams.height = MainMap.height;
identifyParams.geometry = event.mapPoint;
identifyParams.mapExtent = MainMap.extent;
identifyParams.spatialReference = MainMap.spatialReference;
identifyParams.layerIds = layerLIS.visibleLayers.source;
identifyParams.layerOption = IdentifyParameters.LAYER_OPTION_ALL;
clickGraphicsLayer.clear();
MainMap.infoWindow.hide();
graphicsLayer.clear();
cursorManager.setBusyCursor();
identifyTask.url = layerLIS.url;
identifyTask.execute(identifyParams, new AsyncResponder(resultFunction, faultFunction, clickGraphic));
function resultFunction(results:Array, clickGraphic:Graphic):void
{
var myInfoRenderer:InfoRenderer = new InfoRenderer;
var mapPoint:MapPoint = MapPoint(clickGraphic.geometry);
var point:Point = MainMap.toScreen(mapPoint);
if (results && results.length > 0)
{
var oldLayer:Number = -1;
var resultsArray:Array = [];
var result:IdentifyResult;
var resultGraphic:Graphic;
var tab:TabNavigator = new TabNavigator();
var newVBox:VBox = new VBox;
var newVBoxDG:VBox = new VBox;
var newText:Text = new Text;
var newDG:DataGrid = new DataGrid;
var graphic:Graphic;
clickGraphicsLayer.add(clickGraphic);
result = results[0];
oldLayer = result.layerId;
resultsArray.push(result.feature.attributes);
newText = new Text;
newText.text = result.layerName;
graphic = result.feature;
graphic.alpha = 0.3;
graphicsLayer.add(graphic);
tab.width = 400;
tab.height = 230;
for (var i:int = 1; i < results.length; i++)
{
result = results;
graphic = new Graphic;
graphic = result.feature;
graphic.alpha = 0.3;
graphicsLayer.add(graphic);
if (result.layerId == oldLayer)
{
resultsArray.push(result.feature.attributes);
}
else
{
newDG = new DataGrid;
newVBox = new VBox;
newDG.dataProvider = resultsArray;
if (!(result.feature.attributes.source == undefined))
{
for each (var dgCol:DataGridColumn in newDG.columns)
{
if (dgCol.dataField == "Source")
{
dgCol.itemRenderer = new ClassFactory(HyperLinkField);
}
}
}
newDG.addEventListener(ListEvent.ITEM_CLICK, newDG_ItemRollOver, false, 0, true);
newDG.addEventListener(ListEvent.ITEM_ROLL_OUT, newDG_ItemRollOut, false, 0 ,true);
newDG.addEventListener(ListEvent.ITEM_ROLL_OVER, newDG_ItemRollOver, false, 0, true);
newVBox.addElement(newText);
newVBox.addElement(newDG);
// newVBox.addElement(newVBoxDG);
newVBox.label = oldLayer.toString();
newVBox.label = oldLayer.toString();
tab.addElement(newVBox);
myInfoRenderer.addElement(tab);
newText = new Text;
newText.text = result.layerName;
resultsArray = [];
resultsArray.push(result.feature.attributes);
}
oldLayer = result.layerId;
}
newVBox = new VBox;
newVBoxDG = new VBox;
newDG = new DataGrid;
newDG.addEventListener(ListEvent.ITEM_CLICK, newDG_ItemRollOver, false, 0, true);
newDG.addEventListener(ListEvent.ITEM_ROLL_OUT, newDG_ItemRollOut, false, 0, true);
newDG.addEventListener(ListEvent.ITEM_ROLL_OVER, newDG_ItemRollOver, false, 0, true);
newVBox.addElement(newText);
newDG.dataProvider = resultsArray;
if (!(results[0].feature.attributes.Source == undefined))
{
for each (var dgCol:DataGridColumn in newDG.columns)
{
if (dgCol.dataField == "Source")
{
dgCol.itemRenderer = new ClassFactory(HyperLinkField);
}
}
}
newVBox.addElement(newDG);
// newVBoxDG.addElement(newDG);
// newVBox.addElement(newVBoxDG);
newVBox.label = oldLayer.toString();
tab.addElement(newVBox);
myInfoRenderer.addElement(tab);
cursorManager.removeBusyCursor();
MainMap.infoWindow.content = myInfoRenderer;
MainMap.infoWindow.label = "Results";
MainMap.infoWindow.show(MainMap.toMap(point));
MainMap.infoWindow.addEventListener(Event.CLOSE, infoWindow_Close, false, 0, true);
}
}
}