ThinkGeo.com    |     Documentation    |     Premium Support

Feature Sensitive Popup or ContextMenu for a single layer

 I was looking into making either a popup Menu or a Context Menu that is unique for each feature on a layer.


We have a work order system so we would be looking to reference one of the values attached to Work Order Feature.  Here is an example of the output that I am looking to implement:


When the menu or context menu comes up, Text "Work Order: [Feature.WorkOrderNumber]".  This would allow hte user to hover or right click on any of the bubbles that represent a point Work Order and determine which one they are looking at.  


Is there some way to do this with the current suite of web products using ajax?  Examples will help the most.  Thanks



Chris, 



Thank you for your post, you can try the code below to add anything you want to the popup: 



markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.Popup.ContentHtml = "[#Name#]";  



Or try this code below to use context menu: 


                ContextMenuItem redirectItem = new ContextMenuItem("<a href='thinkgeo.com' target='_blank'>ThinkGeo<a>");
                ContextMenuItem showPositionItem = new ContextMenuItem("CurrentPosition(Server Event)");
                ContextMenuItem InfomationItem = new ContextMenuItem("<div onclick='popupInfomation();'>Infomation(Client Event)");
                showPositionItem.Click += new EventHandler<ContextMenuItemClickEventArgs>(showPosition_Click);
 



Regards, 



Gary



Hello Gary, 


This code that you posted here is interesting to me:





markerOverlay.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.Popup.ContentHtml = "[#Name#]"; 


Using this syntax will the section [#Name#] be replaced by the Column value of index "Name" for each different feature that was used to create a marker in markerOverlay?  This situation that I have is that markerOverlay has multiple features that represent different Work Orders.  I want to know if there is some way to open a popup window that uses that feature column values without doing any runtime processing.  Is there any means of using some form of substitution in the Popup.ContentHtml or would this need to be achieved by using a server side event to build the Html I need manually based on what Marker I clicked on?

 



Chris, 



Yes, please have a look at the code below: 




void markerOverlay_Click(object sender, MarkerOverlayClickEventArgs e)
        {
            SimpleMarkerOverlay markerOverlay = (SimpleMarkerOverlay)sender;
            Marker selectedMarker = null;
            foreach (Marker marker in markerOverlay.Markers)
            {
                marker.Popup.ContentHtml = GetPopupContent(marker.Id);
                if (marker.Id == e.FeatureId)
                {
                    selectedMarker = marker;
                    break;
                }
            }
            selectedMarker.Popup.ContentHtml = GetPopupContent(selectedMarker.Id);
            //clickPointShape = (PointShape)feature.GetShape();

            Map1.Popups.Clear();
            CloudPopup popup = new CloudPopup(selectedMarker.Id, selectedMarker.Position, string.Empty, 150, 60);

            popup.AutoSize = true;
            popup.AutoPan = true;
            popup.HasCloseButton = true;
            Map1.Popups.Add(popup);

            popup.ContentHtml = selectedMarker.Popup.ContentHtml;
        }



        private string GetPopupContent(string name)
        {
            string content;
            if (!string.IsNullOrEmpty(name))
            {
                StringBuilder message = new StringBuilder();
                message.AppendFormat("{0}", name);
                message.AppendFormat("{0}", string.Empty);
                message.AppendFormat("");
                message.AppendFormat("");
                message.AppendFormat("<a href=javascript:__doPostBack('saveMaker','') id='btnSaveMaker'>Save</a> ", "");
                message.AppendFormat("<a href=javascript:" + ClientScript.GetPostBackEventReference(this.deleteMarker, name) + " id='btnHotel'>DeleteMarker</a> ", "");
                message.AppendFormat("");
                message.AppendFormat("FindNearest");
                message.AppendFormat("");
                message.AppendFormat("<a href=javascript:setQueryType('HOTEL');__doPostBack('spatialQuery','') id='btnHotel'>Hotel</a> ", "");
                message.AppendFormat("<a href=javascript:setQueryType('HOSPITAL');__doPostBack('spatialQuery','') id='btnHospital'>Hospital</a> ", "");
                message.AppendFormat("");

                string messageInPopup = String.Format("{0}", message.ToString());

                content = messageInPopup;
            }
            else
            {
                content = string.Empty;
            }
            return content;
        }


 Regards, 



Gary