In the scenario below one should be able to access the defined UserData value in the SearchCompleted event handler
How to reproduce:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.radMap1.ShowSearchBar = true;
BingRestMapProvider bingProvider = this.radMap1.Providers[0] as BingRestMapProvider;
this.radMap1.MapElement.SearchBarElement.SearchProvider = bingProvider;
this.radMap1.MapElement.SearchBarElement.SearchProvider.SearchCompleted += BingProvider_SearchCompleted;
}
private void BingProvider_SearchCompleted(object sender, SearchCompletedEventArgs e)
{
Telerik.WinControls.UI.Map.RectangleG allPoints = new Telerik.WinControls.UI.Map.RectangleG(double.MinValue, double.MaxValue, double.MaxValue, double.MinValue);
this.radMap1.Layers["Pins"].Clear();
foreach (Telerik.WinControls.UI.Map.Bing.Location location in e.Locations)
{
Telerik.WinControls.UI.Map.PointG point = new Telerik.WinControls.UI.Map.PointG(location.Point.Coordinates[0], location.Point.Coordinates[1]);
MapPin pin = new MapPin(point);
pin.Size = new System.Drawing.Size(20, 40);
pin.BackColor = Color.Red;
pin.ToolTipText = location.Address.FormattedAddress;
this.radMap1.MapElement.Layers["Pins"].Add(pin);
allPoints.North = Math.Max(allPoints.North, point.Latitude);
allPoints.South = Math.Min(allPoints.South, point.Latitude);
allPoints.West = Math.Min(allPoints.West, point.Longitude);
allPoints.East = Math.Max(allPoints.East, point.Longitude);
}
if (e.Locations.Length > 0)
{
if (e.Locations.Length == 1)
{
this.radMap1.BringIntoView(new Telerik.WinControls.UI.Map.PointG(e.Locations[0].Point.Coordinates[0], e.Locations[0].Point.Coordinates[1]));
}
else
{
this.radMap1.MapElement.BringIntoView(allPoints);
this.radMap1.Zoom(this.radMap1.MapElement.ZoomLevel - 1);
}
}
else
{
RadMessageBox.Show("No result found for the provided search query!");
}
}
Telerik.WinControls.UI.Map.Bing.SearchRequest request;
private void radButton1_Click(object sender, EventArgs e)
{
Telerik.WinControls.UI.MapLayer pinsLayer = new MapLayer("Pins");
this.radMap1.Layers.Add(pinsLayer);
request = new SearchRequest();
request.Query = "San Marino";
request.SearchOptions.Count = 10;
request.SearchOptions.QueryParse = true;
request.UserData = "Tooltip";
BingRestMapProvider bingProvider = this.radMap1.Providers[0] as BingRestMapProvider;
bingProvider.SearchAsync(request);
}
Workaround: if possible cache the data to be accessed at a later stage