ThinkGeo.com    |     Documentation    |     Premium Support

Given key was not present message

I have a message that appears in the upper left corner of my map window which reads 'The given key was not present in the dictionary'.  I am adding and then clearing features from an InMemoryFeatureLayer.  Adding features to the layer works fine.  The message appears when I clear the features from the layer.  I am using layer.InternalFeatures.Clear() to remove all of the features from the layer and this may or may not have anything to do with the message.  I need some idea where to look for the problem.


Charles



Charles, 
  
 It seems pretty straight forward, you are trying to use a key to get a value but the key does not exist. I don’t find there are some links between InternalFeatures.Clear method and this exception. 
 And also I have given a try for that, if I pass a key that don’t exist in the InternalFeatures and the exception will occur. 
  
 Please review your code again and if you still have any questions about it please let us know. And if you can attach the codes to recreate the problem and I will be appreciated that. 
  
 Thanks, 
  
 Khalil

Khalil,



I have checked my code and can't make any headway.  I have a map view with a static overlay containing many MsSql2008FeatureLayers.  There was not trouble drawing these to display the map.  I added several features to an InMemoryFeatureLayer and added that to the DynamicOverlay and there was no problem displaying that.  I press my Erase Highlights button to remove the highlighted features and the message appears.  The 'Erase Highlights' button executes the following code:




    protected void EraseBtn_Click(object sender, EventArgs e)
    {
        try
        {
            ViewFeatureInfo.UpdateByErasingHighlights();
            UpdatePanel mapUpdatePanel = (UpdatePanel)NextGenProject.ParentPage.FindControl("MapUPD");
            mapUpdatePanel.Update();
        }
        catch
        {
            throw;
        }
    }

    public static void UpdateByErasingHighlights()
    {
        try
        {
            bool redraw = false;
       
            InMemoryFeatureLayer layer = (InMemoryFeatureLayer)MapControl.MapWindow.DynamicOverlay.Layers[MapControl.Highlighter.HighlightLayerName];
            if (layer.InternalFeatures.Count > 0)
            {
                layer.InternalFeatures.Clear();
                redraw = true;
            }
            layer = (InMemoryFeatureLayer)MapControl.MapWindow.DynamicOverlay.Layers[MapControl.FeaturePicker.PickerLayerName];
            if (layer.InternalFeatures.Count > 0)
            {
                layer.InternalFeatures.Clear();
                redraw = true;
            }
            if (redraw) MapControl.MapWindow.DynamicOverlay.Redraw();
        }
        catch
        {
            throw;
        }
    }


There was no message present when I pressed the 'Erase Highlights' button and this is all of my code that executes.  When the map window reappears, the message is present in the upper left corner of the screen.  All of my code is wrapped in error handling (such as it is) so no trappable errors occur.  Perhaps you could tell me what happens in you code that might cause this message.  What collections are searched by the map control?



Charles



Hi, Charles



The type of InternalFeatures is GeoCollection<Feature> which inherits from Collection<T> and we don't override the Clear method. 

Also I give it a try with your attached codes and it works well.  Also I have done some tests.

I think the problem occurs at the server-side which is in charge of the logic of rendering. 

By default, the exception message will be drawn on the returned every tile image. I guess that you have set the TileType for LayerOverlay as SingleTile so that the exception message is present at the upper left corner of map control.

Now we have got where this problem comes from, and so I need to recreate this problem and then fix it. I am not sure whether there is some links with others codes you are consuming. 

Can you send me one simple solution that could recreate this problem? So that we can address it quickly and that will be appreciated. The attachment is my testing code, and I use the transaction to delete the feature. Please give it a try.



Thanks,



Khalil  



001_DataProviders.zip (2.63 KB)