ThinkGeo.com    |     Documentation    |     Premium Support

“the given key was not present in the dictionary” after deleting shape

After deleting a shape for a layer, the tiles involved in redisplaying the map show “the given key was not present in the dictionary”. This just began occurring when I update from “3.1.16.0” to “4.5.0.0”.


Each shape is individually added to multiple shape layers and a point layer for movable text. 
Each Layer is added to a master overlay layer LayerOverlay("Master", False, TileType.MultipleTile) and then added to the map as a CustomOverlay Map1.CustomOverlays.Add(varMasterOverlayNew.
 
Because each shape is given a different color, individual value item is setup for each shape, added to a value style and then added as a Custom Style to the layer. varLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(varValueStyle).
 
When a shape is selected and deleted, the shape is deleted from each layer.
When the map is redrawn
Dim overlay As New LayerOverlay()
overlay = Map1.CustomOverlays("Master")
overlay.Redraw()
The tile involved displays “the given key was not present in the dictionary”
 
This problem only stared after upgrading. We went through an intermediate release 4.0.40.0, and I do not believe it had the problem.
 
Thanks!
Cyndi Pruett 

 


Hi, Cyndi
Thanks for your detailed description for your problem. We have given a try for that but it can’t be re-produced easily, so please provide us a simple sample to recreate your problem. Thanks in advance.
Khalil

I was afraid of that. My ap is pretty complex - 
 Let me ask this - 
 When deleting a shape from an in-memory layer - what are the steps that are normally gone through to delete the shape? 
 What are the normal reasons for getting the error message  “the given key was not present in the dictionary” 
 Thanks! 
 Cyndi

 



Hi Cyndi,
Deleting a feature from InMemoryFeatureLayer is a simple operation. I was thinking that maybe the feature is removed from the collection before doing the real operation. Please check the demo which we used for test and check whether it’s what you want, or can you do the changes to make sure it can recreate your issue.
Thanks,
Johnny


002_001_Test.zip (6.65 KB)

Which demo did you’all use for the test?

Hi Cyndi, 



Sorry that I’m not very clear about the reply, the test project is the one attached in the post. We are not sure that it follows your scenario completely, is it possible for you to do some changes based on the sample to recreate your problem, because it’s hard for us to determine what happened in your application just based on the description.Maybe it's related to other codes in the applicaiton. 



Thanks, 

Johnny 



 



InMemoryIssueTest.zip (6.65 KB)

I revamped the example to how my code was executing - deleting a single shape out of a layer - but it worked. 
 I was executing: 
 If varLayer.InternalFeatures.Contains(ID) Then 
      varLayer.InternalFeatures.Remove(ID) 
 End If 
  
 I tried some other methods and found that 
 If varLayer.InternalFeatures.Contains(ID) Then 
     varLayer.Open() 
     varLayer.EditTools.BeginTransaction() 
     varLayer.EditTools.Delete(ID) 
     varLayer.EditTools.CommitTransaction() 
     varLayer.Close() 
 End If 


see above posting

I am glad this is working for you in the end. Let us know if you have other questions.