Save updates to a datagrid?

1573
2
Jump to solution
12-12-2013 12:01 PM
ionarawilson1
Occasional Contributor III
Can anybody show me how to delete and save updates to a datagrid? If not to delete, at least to update the edits will help. Here is my code with two buttons, one to delete and one to save the record. Thanks

<?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"       pageTitle="Related records">    <s:layout>   <s:VerticalLayout gap="0"/>  </s:layout>    <fx:Script>   <![CDATA[    import com.esri.ags.FeatureSet;    import com.esri.ags.events.FeatureLayerEvent;    import com.esri.ags.events.MapMouseEvent;    import com.esri.ags.geometry.Extent;    import com.esri.ags.tasks.supportClasses.Query;    import com.esri.ags.tasks.supportClasses.RelationshipQuery;        import mx.controls.Alert;    import mx.rpc.AsyncResponder;        [Bindable]    private var selectedObjectID:Number;    [Bindable]    private var relatedRecordsCount:Number;        private function findWells(event:MapMouseEvent):void    {     // find wells near the mouse click     var tol:Number = map.extent.width / map.width * 5;     var x:Number = event.mapPoint.x;     var y:Number = event.mapPoint.y;     var queryExtent:Extent = new Extent(x - tol, y - tol, x + tol, y + tol, event.mapPoint.spatialReference);     var thisSelectionQuery:Query = new Query();     thisSelectionQuery.geometry = queryExtent;     wellsLayer.selectFeatures(thisSelectionQuery, FeatureLayer.SELECTION_NEW);    }        private function wellsLayer_selectionCompleteHandler(event:FeatureLayerEvent):void    {     relatedDatagrid.dataProvider = null;     // check the first return feature to see if it has any related features     if (event.features.length > 0)     {      relatedTopsQuery.objectIds = [ event.features[0].attributes.OBJECTID ];      selectedObjectID = event.features[0].attributes.OBJECTID;      wellsLayer.queryRelatedFeatures(relatedTopsQuery, new AsyncResponder(onResult, onFault));      function onResult(relatedRecords:Object, token:Object = null):void      {       // get related records for the first feature       var fset:FeatureSet = (relatedRecords[event.features[0].attributes.OBJECTID]);       if (fset is FeatureSet)       {        relatedDatagrid.dataProvider = new ArrayCollection(fset.attributes)        relatedRecordsCount = fset.attributes.length;       }       else       {        Alert.show("No related records for well #" + event.features[0].attributes.OBJECTID, "No related records");        relatedRecordsCount = 0;       }      }      function onFault(info:Object, token:Object = null):void      {       map.infoWindow.hide();       Alert.show(info.toString(), "queryRelatedFeatures Problem");      }     }     else     {      map.infoWindow.hide();      Alert.show("No wells found here, please try somewhere else.", "No features");     }    }        protected function showRelatedRecordsForObjectID(event:MouseEvent):void    {     var url:String = 'http://tfsgis-iisd01:6080/arcgis/rest/services/SARS_WILSON/RELATED_TABLES/MapServer/0/queryRelatedRecords?objectIds=' + selectedObjectID + '&relationshipId=3&definitionExpression=&returnGeometry=true&outSR=&outFields=*&f=html'     navigateToURL(new URLRequest(url), "_blank");    }        protected function saveRelatedRecordsForObjectID(event:MouseEvent):void    {                             }                    protected function deleteRelatedRecordsForObjectID(event:MouseEvent):void    {         }   ]]>  </fx:Script>    <fx:Declarations>   <esri:RelationshipQuery id="relatedTopsQuery"         outFields="[Forester,Office,OfficeActivity,Acres,Number]"         relationshipId="0"/>  </fx:Declarations>    <s:controlBarLayout>   <s:VerticalLayout gap="10"         paddingBottom="7"         paddingLeft="10"         paddingRight="10"         paddingTop="7"/>  </s:controlBarLayout>  <s:controlBarContent>      <s:Button click="saveRelatedRecordsForObjectID(event)"       label="Save"       visible="{relatedRecordsCount > 0}"/>      <s:Button    click="deleteRelatedRecordsForObjectID(event)"    label= "Delete Records"    visible="{relatedRecordsCount > 0}"/>           </s:controlBarContent>    <esri:Map id="map" mapClick="findWells(event)">   <esri:extent>    <esri:Extent id="sheepfire" xmin="-12414729" ymin="2939999" xmax="-9838830" ymax="4415185">          <esri:SpatialReference wkid="102100"/>    </esri:Extent>   </esri:extent>   <esri:ArcGISTiledMapServiceLayer url="http://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer"/>   <esri:ArcGISDynamicMapServiceLayer url="http://tfsgis-iisd01:6080/arcgis/rest/services/SARS_WILSON/RELATED_TABLES/MapServer">    <esri:visibleLayers>     <s:ArrayCollection>      <fx:Number>0</fx:Number>      <fx:Number>1</fx:Number>     </s:ArrayCollection>    </esri:visibleLayers>   </esri:ArcGISDynamicMapServiceLayer>   <esri:FeatureLayer id="wellsLayer"          mode="selection"          outFields=""           selectionComplete="wellsLayer_selectionCompleteHandler(event)"          url="http://tfsgis-iisd01:6080/arcgis/rest/services/SARS_WILSON/RELATED_TABLES/MapServer/0">    <esri:infoWindowRenderer>     <fx:Component>      <esri:LabelDataRenderer>       <esri:layout>        <s:VerticalLayout/>       </esri:layout>       <esri:label>Well ID {data.OBJECTID}</esri:label>       <s:Label text="Plug date: {data.plug_date ? new Date(data.plug_date) : 'No date available'}"/>       <s:Label text="Completion: {data.completion ? new Date(data.completion) : 'No date available'}"/>      </esri:LabelDataRenderer>     </fx:Component>    </esri:infoWindowRenderer>   </esri:FeatureLayer>  </esri:Map>  <s:DataGrid id="relatedDatagrid"     width="100%" height="45%"     edit     >   <s:columns>    <s:ArrayList>     <s:GridColumn dataField="Forester" headerText="ID"/>     <s:GridColumn dataField="Office" headerText="API Number"/>     <s:GridColumn dataField="OfficeActivity" headerText="Elevation"/>     <s:GridColumn dataField="Acres" headerText="Formation"/>     <s:GridColumn dataField="Number" headerText="Top"/>    </s:ArrayList>   </s:columns>  </s:DataGrid>   </s:Application>
Tags (2)
0 Kudos
1 Solution

Accepted Solutions
BenjaminMercier
New Contributor III
Hi Ionara,

Sorry I don't have many times to use your example. But I can give you a short sample to save updates.

function saveUpdatesFromDG():void{  var updates:Array = [];  for(var iRow:Number = 0; iRow<dgDataProvider.length; iRow ++)  {   var attributes:Object = {};   for (var id:String in dgDataProvider.getItemAt(iRow))   {          attributes[id] = dgDataProvider.getItemAt(iRow)[id];   }   var feature:Graphic = new Graphic(null, null, attributes);   updates.push(feature);  }  featureLayer.applyEdits(null,updates,null); }


I hope it helps

View solution in original post

0 Kudos
2 Replies
BenjaminMercier
New Contributor III
Hi Ionara,

Sorry I don't have many times to use your example. But I can give you a short sample to save updates.

function saveUpdatesFromDG():void{  var updates:Array = [];  for(var iRow:Number = 0; iRow<dgDataProvider.length; iRow ++)  {   var attributes:Object = {};   for (var id:String in dgDataProvider.getItemAt(iRow))   {          attributes[id] = dgDataProvider.getItemAt(iRow)[id];   }   var feature:Graphic = new Graphic(null, null, attributes);   updates.push(feature);  }  featureLayer.applyEdits(null,updates,null); }


I hope it helps
0 Kudos
ionarawilson1
Occasional Contributor III
Thank you Ben. I just have a quick question and I'll leave you alone, I promise 🙂 Do you think you can answer the question in the post below? I actually got that search to work, where the records in the table appear according to a search but the feature layer needs to be created pro grammatically. Thank you so much!!!

http://forums.arcgis.com/threads/98783-Why-is-feature-layer-not-editable-when-is-programatic
0 Kudos