internal void DeleteLayer(RedlineLayer layer) { var regId = GetRegistryFeatureSource(); MgFeatureCommandCollection commands = new MgFeatureCommandCollection(); MgDeleteFeatures delete = new MgDeleteFeatures("Default:MarkupRegistry", "ResourceId = '" + layer.FeatureSource + "'"); commands.Add(delete); MgPropertyCollection results = _featSvc.UpdateFeatures(regId, commands, false); MgInt32Property deleteResult = results.GetItem(0) as MgInt32Property; if (deleteResult != null && deleteResult.GetValue() > 0) { var ldfId = new MgResourceIdentifier(layer.LayerDefinition); var fsId = new MgResourceIdentifier(layer.FeatureSource); if (_resSvc.ResourceExists(ldfId)) { _resSvc.DeleteResource(ldfId); } if (_resSvc.ResourceExists(fsId)) { _resSvc.DeleteResource(fsId); } } }
internal void DeleteRedlines(int[] ids) { MgMapBase map = _viewer.GetMap(); MgLayerCollection layers = map.GetLayers(); MgLayerBase redlineLayer = layers.GetItem(_layer.SystemName); //HACK: Workaround FeatId leaky abstraction in SHP provider MgClassDefinition cls = redlineLayer.GetClassDefinition(); MgPropertyDefinitionCollection idProps = cls.GetIdentityProperties(); MgPropertyDefinition idProp = idProps.GetItem(0); redlineLayer.ForceRefresh(); //This lib doesn't reference mg-desktop so the convenience APIs aren't available to us //Gotta go the old verbose route List <string> filters = new List <string>(); foreach (int id in ids) { filters.Add(idProp.Name + " = " + id); } string deleteFilter = string.Join(" OR ", filters.ToArray()); MgFeatureCommandCollection commands = new MgFeatureCommandCollection(); MgDeleteFeatures delete = new MgDeleteFeatures(redlineLayer.FeatureClassName, deleteFilter); commands.Add(delete); MgPropertyCollection result = redlineLayer.UpdateFeatures(commands); MgInt32Property deleteResult = result.GetItem(0) as MgInt32Property; if (deleteResult != null && deleteResult.GetValue() > 0) { _viewer.RefreshMap(); } }