Common Add dynamic data
Common_AddDynamicData_VBNet\Callback.aspx.vb
' Copyright 2010 ESRI
' 
' All rights reserved under the copyright laws of the United States
' and applicable international laws, treaties, and conventions.
' 
' You may freely redistribute and use this sample code, with or
' without modification, provided you include the original copyright
' notice and use restrictions.
' 
' See the use restrictions.
' 

Imports Microsoft.VisualBasic
Imports System
Public Partial Class Callback
  Inherits System.Web.UI.Page
  Implements System.Web.UI.ICallbackEventHandler
  #Region "Instance Variable Declarations"

  Private m_ADFCallbackFunctionString As String
  Private m_CallbackResults As String = String.Empty
  Private m_CheckBoxId As String = String.Empty
  Private Const AGSLocalName As String = "AGSLocalMapResource"
  Private Const AGSInternetName As String = "AGSInternetMapResource"
  Private Const IMSName As String = "IMSMapResource"

  #End Region

  #Region "ASP.NET Page Event Handlers"

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
    ' Add an onclick event for each checkbox
    For Each checkBox As System.Web.UI.WebControls.ListItem In CheckBoxList1.Items
      checkBox.Attributes.Add("onclick", "AddOrRemoveMapResource(this)")
    Next checkBox

    ' Define the parameters for a browser call to the WebForm_DoCallback JavaScript function
    ' via the GetCallbackEventReference function.  The GetCallbackEventReference function returns 
    ' the syntax for initiating a callback (i.e a call to WebForm_DoCallback) with the passed-in 
    ' parameters.  Here the parameters are defined as follows:
    ' this - the Page will handle the callback request
    ' "message" - a JavaScript variable named "message" will contain argument-value pairs passed 
    '      to the callback server-side
    ' "processCallbackResult" - name of the JavaScript function to process the callback 
    '      results from the server.  This function is the callback results handler included with 
    '      the Web ADF JavaScript Library.
    ' "context" - a JavaScript variable named "context" which can be used by the client to
    '      indicate the origin of the callback
    ' "postBackError" - name of the JavaScript function that will process errors returned during 
    '      callback processing.  This is the callback error handler included with the Web ADF 
    '      JavaScript Library
    ' true - define whether the callback is synchronous or asynchronous.  True is asynchronous.        
    m_ADFCallbackFunctionString = Page.ClientScript.GetCallbackEventReference (Me, "message", "processCallbackResult", "context", "postBackError", True)
  End Sub

  #End Region

  #Region "ICallbackEventHandler Members"

  ' Parse callback request to determine which checkbox was checked\unchecked and thus which
  ' resource will be added or removed.
  Public Sub RaiseCallbackEvent(ByVal eventArgs As String) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
    Try
      ' Parse the callback string passed from the client to the server into separate
      ' arguments using the Web ADF's callback parsing utility.
      Dim nameValueCollection As System.Collections.Specialized.NameValueCollection = Nothing
      nameValueCollection = ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackUtility.ParseStringIntoNameValueCollection(eventArgs)
      ' Check whether the EventArg matches that created by the custom callback
      ' and, if so, add the resource corresponding to the checkbox clicked
      If nameValueCollection("EventArg") = "ChangeResource" Then
        ' Get the type of datasource, whether the checkbox was checked or unchecked,
        ' and the control id of the checkbox clicked from the collection of arguments
        Dim dataSourceType As String = nameValueCollection("DataSource")
        Dim isChecked As Boolean = Boolean.Parse(nameValueCollection("IsChecked"))
        m_CheckBoxId = nameValueCollection("CheckboxID")
        Dim resourceName As String = String.Empty
        Select Case dataSourceType
          ' Set the resource name class variable based on the data source type
          Case "ArcGIS Server Local"
            resourceName = AGSLocalName
          Case "ArcGIS Server Internet"
            resourceName = AGSInternetName
          Case "ArcIMS"
            resourceName = IMSName
          Case Else
        End Select

        ' Call the method to add/remove the resource corresponding to the checkbox clicked
        m_CallbackResults = AddOrRemoveMapResource(resourceName, isChecked)
      End If
    Catch exception As System.Exception
      Dim errorCallbackResult As ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult = ErrorHandling.GetErrorCallback(exception)
      Map1.CallbackResults.Add(errorCallbackResult)
      m_CallbackResults = Map1.CallbackResults.ToString()
    End Try
  End Sub

  ' Return callback result to the browser.  
  Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
    Return m_CallbackResults
  End Function

  #End Region

  #Region "Instance Properties"

  ' Store the callback function string used by the browser to initiate a callback request.
  ' Added to the aspx page as a server variable - populated at runtime.
  Public Property ADFCallbackFunctionString() As String
    Get
      Return m_ADFCallbackFunctionString
    End Get
    Set
      m_ADFCallbackFunctionString = Value
    End Set
  End Property

  #End Region

  #Region "Instance Methods"

  Private Function AddOrRemoveMapResource(ByVal resourceName As String, ByVal isChecked As Boolean) As String
    Try
      Dim mapResourceItemCollection As ESRI.ArcGIS.ADF.Web.UI.WebControls.GISResourceItemCollection(Of ESRI.ArcGIS.ADF.Web.UI.WebControls.MapResourceItem) = MapResourceManager1.ResourceItems
      Dim mapResourceItem As ESRI.ArcGIS.ADF.Web.UI.WebControls.MapResourceItem = Nothing

      ' Get current resource item count to determine if the primary map resource needs to be set.
      Dim mapResourceCount As Integer = mapResourceItemCollection.Count

      ' If checked, add the resource.  If unchecked, remove the resource.
      If (Not isChecked) Then
        mapResourceItem = mapResourceItemCollection.Find(resourceName)
        mapResourceItemCollection.Remove(mapResourceItem)
        Map1.Refresh()
      Else
        mapResourceItem = New ESRI.ArcGIS.ADF.Web.UI.WebControls.MapResourceItem()

        ' Map resource items consist of a definition and display settings.  The definition 
        ' will define the data source and resource parameters.  Display settings will define
        ' map image properties and retrieval types. 
        Dim gisResourceItemDefinition As ESRI.ArcGIS.ADF.Web.UI.WebControls.GISResourceItemDefinition = New ESRI.ArcGIS.ADF.Web.UI.WebControls.GISResourceItemDefinition()

        ' Check the name of the resource corresponding to the checkbox checked and initialize
        ' the resource definition accordingly
        Select Case resourceName
          Case (AGSLocalName)
            gisResourceItemDefinition.DataSourceDefinition = "localhost"
            gisResourceItemDefinition.DataSourceType = "ArcGIS Server Local"
                        gisResourceItemDefinition.ResourceDefinition = "Layers@USA"
          Case (AGSInternetName)
                        gisResourceItemDefinition.DataSourceDefinition = "http://serverapps.esri.com/arcgis/services/"
            gisResourceItemDefinition.DataSourceType = "ArcGIS Server Internet"
                        gisResourceItemDefinition.ResourceDefinition = "Layers@SamplesNet/NorthAmerica"
          Case (IMSName)
            gisResourceItemDefinition.ResourceDefinition = "states"
            gisResourceItemDefinition.DataSourceDefinition = "localhost@5300"
            gisResourceItemDefinition.DataSourceType = "ArcIMS"
        End Select


        ' Associate the resource item definition with a map resource item
        mapResourceItem.Definition = gisResourceItemDefinition
        ' Set the resource item's name to the passed-in resource name
        mapResourceItem.Name = resourceName

        ' Initialize display settings
        Dim displaySettings As ESRI.ArcGIS.ADF.Web.DisplaySettings = New ESRI.ArcGIS.ADF.Web.DisplaySettings()
        displaySettings.Transparency = 50.0F
        displaySettings.ImageDescriptor.ImageFormat = ESRI.ArcGIS.ADF.Web.ImageFormat.PNG8
        displaySettings.ImageDescriptor.TransparentBackground = True
        displaySettings.ImageDescriptor.TransparentColor = System.Drawing.Color.White
        displaySettings.ImageDescriptor.ReturnMimeData = False


        ' Associate the map resource with the display settings
        mapResourceItem.DisplaySettings = displaySettings

        ' Insert the new resource item at the beginning (top).
        MapResourceManager1.ResourceItems.Insert(0, mapResourceItem)
        mapResourceItem.InitializeResource()

        ' Make sure that the resource item initialized properly.  Call the 
        ' GetResourceInitFailureCallback error handling method if the resource item
        ' did not initialize.
        If mapResourceItem.FailedToInitialize Then
          Dim exceptionMessage As String = mapResourceItem.InitializationFailure.Message
          Return ErrorHandling.GetResourceInitFailureCallback(exceptionMessage, m_CheckBoxId)
        End If
      End If

      ' Refresh the Toc and add to Map's callback result collection.
      Toc1.Refresh()
      Map1.CallbackResults.CopyFrom(Toc1.CallbackResults)
    Catch exception As System.Exception
      Dim errorCallbackResult As ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult = ErrorHandling.GetErrorCallback(exception)
      Map1.CallbackResults.Add(errorCallbackResult)
    End Try

    ' return the Map's collection of callback results as a string
    Return Map1.CallbackResults.ToString()
  End Function


  #End Region
End Class