English

How To: Programmatically change the data source of a layer in ArcMap

Summary

The sample code provided is to programmatically change a layer's data source in ArcMap.

Procedure

 

  1. Start ArcMap and add a feature class to the map.
  2. Create a new UIButtonControl: How To: Create a new UIButtonControl​
    Note:
    For more information on creating a UIControl, see the ArcGIS Desktop Help topic: 'Creating custom commands with VBA and UI Controls'
  3. Right-click the UIButtonControl and select View Source.
  4. Copy this code into the UIButtonControl's click event.
     
    Code:
    Dim pmxdoc As IMxDocument
    Set pmxdoc = ThisDocument
        
    Dim pmap As IMap
    Set pmap = pmxdoc.ActiveView
        
    Dim pfeatlayer As IFeatureLayer
    Set pfeatlayer = pmap.Layer(0)
        
    Dim pdatalayer As IDataLayer
    Set pdatalayer = pfeatlayer
        
    Dim pname As IName
    Dim strTable As String
    Dim strLocation As String
        
    ' Set the path to the directory containing the shapefile.
    strLocation = "C:\testing\canada"
        
    ' Set the shapefile name to be used as the data source.
    strTable = "provinces"
        
    Dim pdatasetname As IDatasetName
    Dim ptable As ITable
    Dim pwrkspc As IWorkspaceName
    
    Set pwrkspc = New WorkspaceName
    pwrkspc.PathName = strLocation
        
    ' If a data source other than a shapefile is used,
    ' the workspace type will need to be changed.
    pwrkspc.WorkspaceFactoryProgID = "esricore.shapefileworkspacefactory.1"
    
    Set pdatasetname = New TableName
    pdatasetname.Name = strTable
    Set pdatasetname.WorkspaceName = pwrkspc
    Set pname = pdatasetname
    Set ptable = pname.Open
        
    Dim pgeodataset As IGeoDataset
    Set pgeodataset = ptable
    Set m_penv = pgeodataset.Extent
        
    Dim pfcname As IDatasetName
    Set pfcname = pname
    pdatalayer.DataSourceName = pname
        
    Dim pav As IActiveView
    Set pav = pmap
        
    pav.Extent = m_penv
    Set pav = pmap
    pav.Refresh
    
  5. Change the values assigned to the STRLOCATION and STRTABLE variables to a shapefile data source.
  6. Click the UIButtonControl to execute the code and change the layers data source.

Related Information