Amanda,1 make query from FeatureService (editable)2 select feature by clicking on grid row3 selected feature is shown in attribute inspector (attribute inspector is a form developed by ESRI team for editing attributes)<?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:esri="http://www.esri.com/2008/ags">
<!-- Adobe Flex SDK 4.6.0 -->
<!-- ArcGIS API for Flex 3.0 15.03.2012 -->
<!-- web.zone.ee/bespiva -->
<s:layout>
<s:VerticalLayout gap="10"
paddingLeft="10"
paddingBottom="10"
paddingRight="10"
paddingTop="10"/>
</s:layout>
<fx:Script>
<![CDATA[
import com.esri.ags.FeatureSet;
import com.esri.ags.Graphic;
import com.esri.ags.events.LayerEvent;
import com.esri.ags.layers.FeatureLayer;
import com.esri.ags.layers.supportClasses.Field;
import com.esri.ags.tasks.supportClasses.Query;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.rpc.AsyncResponder;
import mx.rpc.Fault;
import mx.utils.StringUtil;
import spark.components.gridClasses.GridColumn;
import spark.events.GridSelectionEvent;
[Bindable]
private var gridSource:ArrayCollection = new ArrayCollection();
[Bindable]
private var gridColumns:ArrayCollection = new ArrayCollection();
private var queryLayer:FeatureLayer = null;
private function initializeLayer():void
{
lblMessage.text = "";
queryLayer = new FeatureLayer(txtServiceUrl.text);
queryLayer.mode = FeatureLayer.MODE_ON_DEMAND;
queryLayer.outFields = new Array("*");
queryLayer.addEventListener(LayerEvent.LOAD, onLayerLoaded, false, 0, true);
dispatchEvent(new LayerEvent(LayerEvent.LOAD, queryLayer));
}
protected function onLayerLoaded(event:LayerEvent):void
{
//queryLayer.removeEventListener(LayerEvent.LOAD, onLayerLoaded);
//txtServiceUrl.editable = false;
if (queryLayer.isEditable)
{
lblMessage.text = "Selected layer is editable";
}
else
{
lblMessage.text = "Selected layer is not valid for editing";
}
executeQuery();
}
protected function onExecuteButtonClick(event:MouseEvent):void
{
if (queryLayer != null && queryLayer.loaded)
{
executeQuery();
}
else
{
initializeLayer();
}
}
private function executeQuery():void
{
var query:Query = new Query();
query.where = txtWhere.text;
var outs:Array = StringUtil.trim(txtOuts.text).split(",");
query.outFields = queryLayer.outFields = outs;
queryLayer.queryFeatures(query, new AsyncResponder(onQueryResult, onQueryFault));
}
protected function onQueryResult(featureSet:FeatureSet, token:Object = null):void
{
gridSource = new ArrayCollection();
var doubleClickMessage:String = "";
if (queryLayer.isEditable)
{
doubleClickMessage = "Click to select feature.";
}
lblResultsCount.text = StringUtil.substitute("Found: {0} features. {1}",
featureSet.features.length,
doubleClickMessage);
for each(var gr:Graphic in featureSet.features)
{
gridSource.addItem(gr.attributes);
}
gridSource.refresh();
gridColumns = new ArrayCollection();
for each (var field:Field in featureSet.fields)
{
var gridColumn:GridColumn = new GridColumn(field.name);
gridColumn.headerText = field.alias;
gridColumns.addItem(gridColumn);
}
gridColumns.refresh();
}
protected function onQueryFault(fault:Fault, token:Object = null):void
{
trace(fault.getStackTrace());
Alert.show("Query faults.", "Error");
}
protected function onGetLastResults(event:MouseEvent):void
{
if (gridSource) // != null
{
var messgae:String = StringUtil.substitute("Last results length is {0}", gridSource.length);
Alert.show(messgae, "Message");
}
else
{
Alert.show("No last results found!", "Warning");
}
}
protected function onGridSelectionChange(event:GridSelectionEvent):void
{
if (queryLayer.isEditable && queryLayer.layerDetails && gridResults.selectedItem)
{
var attributes:Object = gridResults.selectedItem;
var oid:Number = attributes[queryLayer.layerDetails.objectIdField];
aInspector.featureLayers = [queryLayer];
var q:Query = new Query();
q.objectIds = [oid];
queryLayer.mode = FeatureLayer.MODE_SELECTION;
queryLayer.selectFeatures(q);
}
}
]]>
</fx:Script>
<s:Panel width="100%"
title="Query parameters">
<s:HGroup width="100%"
height="100%">
<s:VGroup gap="5"
paddingLeft="5"
paddingTop="5"
paddingRight="5"
paddingBottom="5"
width="100%">
<s:HGroup width="100%">
<s:Label text="Url:"
width="150" />
<s:TextInput id="txtServiceUrl"
width="100%"
text="http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/HomelandSecurity/operations/FeatureServer/2" />
</s:HGroup>
<s:HGroup width="100%">
<s:Label text="Where clause:"
width="150" />
<s:TextInput id="txtWhere"
width="100%"
text="1=1" />
</s:HGroup>
<s:HGroup width="100%">
<s:Label text="Out fields (CSV):"
width="150" />
<s:TextInput id="txtOuts"
width="100%"
text="*" />
</s:HGroup>
<s:HGroup width="100%">
<s:Button label="Execute" click="onExecuteButtonClick(event)" />
<s:Button label="Last result length" click="onGetLastResults(event)" />
</s:HGroup>
</s:VGroup>
<s:VGroup width="100%"
height="100%"
gap="5"
paddingLeft="5"
paddingTop="5"
paddingRight="5"
paddingBottom="5">
<s:Label id="lblMessage" />
<esri:AttributeInspector id="aInspector"
deleteButtonVisible="false" />
</s:VGroup>
</s:HGroup>
</s:Panel>
<s:Panel title="Results"
width="100%"
height="100%">
<s:VGroup gap="5"
paddingLeft="5"
paddingTop="5"
paddingRight="5"
paddingBottom="5"
width="100%"
height="100%">
<s:Label id="lblResultsCount" />
<s:DataGrid width="100%"
height="100%"
id="gridResults"
dataProvider="{gridSource}"
columns="{gridColumns}"
selectionChange="onGridSelectionChange(event)"/>
</s:VGroup>
</s:Panel>
</s:Application>
I don't think that the Attribute Inspector will work for me.
If I changed your opinion, see the previous topic "AttributeInspector (with samples)"Anywhere, good luck.