private void HyperlinkButton_Click_1(object sender, RoutedEventArgs e) { Draw draw = new Draw(map) { DrawMode = DrawMode.Rectangle, FillSymbol = new ESRI.ArcGIS.Client.Symbols.SimpleFillSymbol() { BorderThickness = 2, BorderBrush = new SolidColorBrush(Colors.Red) }, IsEnabled = true }; draw.DrawComplete += (s, args) => { GeometryService reproj = new GeometryService(URL); reproj.ProjectCompleted += (rep, done) => { QueryTask qt = new QueryTask(URL); qt.ExecuteCompleted += (task, res) => { GeometryService geos = new GeometryService(URL); geos.UnionCompleted += (geo, un) => { FeatureLayer fl = (FeatureLayer)map.Layers["Layer"]; Graphic g = new Graphic() { Geometry = un.Result, Symbol = ((SimpleRenderer)fl.Renderer).Symbol }; fl.Graphics.Add(g); // Save back to SDE? }; if (res.FeatureSet.Count() > 0) { geos.UnionAsync(res.FeatureSet.ToList<Graphic>()); } draw.IsEnabled = false; }; Query query = new Query(); query.OutFields.Add("*"); query.ReturnGeometry = true; query.OutSpatialReference = map.SpatialReference; query.Geometry = done.Results[0].Geometry; qt.ExecuteAsync(query); }; reproj.ProjectAsync(new List<Graphic>() { new Graphic() { Geometry = args.Geometry } }, new SpatialReference(3424)); }; }
private void HyperlinkButton_Click_1(object sender, RoutedEventArgs e) { Draw draw = new Draw(map) { DrawMode = DrawMode.Rectangle, FillSymbol = new ESRI.ArcGIS.Client.Symbols.SimpleFillSymbol() { BorderThickness = 2, BorderBrush = new SolidColorBrush(Colors.Red) }, IsEnabled = true }; draw.DrawComplete += (s, args) => { GeometryService reproj = new GeometryService(URL); reproj.ProjectCompleted += (rep, done) => { QueryTask qt = new QueryTask(URL); qt.ExecuteCompleted += (task, res) => { GeometryService geos = new GeometryService(URL); geos.UnionCompleted += (geo, un) => { FeatureLayer fl = (FeatureLayer)map.Layers["Layer"]; Graphic g = new Graphic() { Geometry = un.Result, Symbol = ((SimpleRenderer)fl.Renderer).Symbol }; fl.Graphics.Add(g); // if AutoSave = true then it saves on add fl.SaveEdits(); // explicit save to the server when AutoSave = false }; if (res.FeatureSet.Count() > 0) { geos.UnionAsync(res.FeatureSet.ToList<Graphic>()); } draw.IsEnabled = false; }; Query query = new Query(); query.OutFields.Add("*"); query.ReturnGeometry = true; query.OutSpatialReference = map.SpatialReference; query.Geometry = done.Results[0].Geometry; qt.ExecuteAsync(query); }; reproj.ProjectAsync(new List<Graphic>() { new Graphic() { Geometry = args.Geometry } }, new SpatialReference(3424)); }; }
Make sure you are using the feature server url endpoint i.e. (FeatureLayer.Url = "http://.../FeatureServer/{LayerID}") the MapServer/{LayerID} end point is not for editing.
Was the "Type must be Int16" resolved for you? How?
Thanks!
I've run into this same problem, and would be curious to know how you resolved it as well.
You can use service metadata to get the correct datatype for each attribute. FeatureLayer.LayerInfo.Fields should have that information for you.
ArcGIS API for Silverlight API Reference| ArcGIS for Developers
var graphic = new Graphic() { Geometry = someValidGeometry };
foreach(var f in layer.LayerInfo.Fields)
if((f.OutFields.Contains("*") || f.OutFields.Contains(f.Name)) && f.Editable)
f.Attributes[f.Name]= someValidValue; // check f.Type, f.Nullable, f.Length
But if you want to suppress validation, you can set FeatureLayer.ValidateEdits=false.