This document is archived and information here might be outdated. Recommended version. |
ArcObjects Help for .NET developers > ESRI.ArcGIS.Snippets > Snippets > Set Data Source Snippet (ArcObjects .NET 10.4 SDK) |
How to change the datasource of a layer. It changes the data source of the first layer in the selected dataframe.
/// <summary> /// How to change the datasource of a layer. It changes the data source of the first layer in the selected dataframe. /// </summary> /// <param name="mxDocument">An IMxDocument interface.</param> /// <param name="strDatasource">A String that is the DataSource of a Coverage. Ex: "C:\arcgis\ArcTutor\Catalog\Yellowstone"</param> /// <param name="strFeatureClassName">A String that is the FeatureDataset name. Ex: "states"</param> /// <param name="strFeatureDatasetName">A String that is the FeatureClass name. Ex: "arc"</param> /// <remarks></remarks> public void SetDataSource(ESRI.ArcGIS.ArcMapUI.IMxDocument mxDocument, System.String strDatasource, System.String strFeatureClassName, System.String strFeatureDatasetName) { // Create a new ArcInfoWorkspaceFactory ESRI.ArcGIS.Geodatabase.IWorkspaceFactory workspaceFactory=new ESRI.ArcGIS.DataSourcesFile.ArcInfoWorkspaceFactoryClass(); // Get FeatureClass to be set as datasource ESRI.ArcGIS.Geodatabase.IWorkspace workspace=workspaceFactory.OpenFromFile(strDatasource, 0); // Cast from IWorkspace to IFeatureWorkspace ESRI.ArcGIS.Geodatabase.IFeatureWorkspace featureWorkspace=(ESRI.ArcGIS.Geodatabase.IFeatureWorkspace)workspace; ESRI.ArcGIS.Geodatabase.IFeatureDataset featureDataset=featureWorkspace.OpenFeatureDataset(strFeatureClassName); ESRI.ArcGIS.Geodatabase.IFeatureClassContainer featureClassContainer=(ESRI.ArcGIS.Geodatabase.IFeatureClassContainer)featureDataset; ESRI.ArcGIS.Geodatabase.IFeatureClass newFeatureClass=featureClassContainer.get_ClassByName(strFeatureDatasetName); // Get the focus map ESRI.ArcGIS.Carto.IMap map=mxDocument.FocusMap; // Cast from IMap to IActiveView ESRI.ArcGIS.Carto.IActiveView activeView=(ESRI.ArcGIS.Carto.IActiveView)map; // Cast from IMap to IMapAdmin2 ESRI.ArcGIS.Carto.IMapAdmin2 mapAdmin2=(ESRI.ArcGIS.Carto.IMapAdmin2)map; // Get the first layer in the map ESRI.ArcGIS.Carto.ILayer layer=map.get_Layer(0); ESRI.ArcGIS.Carto.IFeatureLayer featureLayer=(ESRI.ArcGIS.Carto.IFeatureLayer)layer; ESRI.ArcGIS.Geodatabase.IFeatureClass oldFeatureClass=featureLayer.FeatureClass; // Change FeatureClass of layer featureLayer.FeatureClass=newFeatureClass; mapAdmin2.FireChangeFeatureClass(oldFeatureClass, newFeatureClass); // Redraw the map activeView.Refresh(); // Update and Refresh TOC ESRI.ArcGIS.Geodatabase.IFeatureDataset newFeatureDataset=(ESRI.ArcGIS.Geodatabase.IFeatureDataset)featureClassContainer; featureLayer.Name=newFeatureDataset.Name + " " + newFeatureClass.AliasName; ESRI.ArcGIS.ArcMapUI.IContentsView contentsView=mxDocument.CurrentContentsView; contentsView.Refresh(null); }
''' <summary> ''' How to change the datasource of a layer. It changes the data source of the first layer in the selected dataframe. ''' </summary> ''' <param name="mxDocument">An IMxDocument interface.</param> ''' <param name="strDatasource">A String that is the DataSource of a Coverage. Ex: "C:\arcgis\ArcTutor\Catalog\Yellowstone"</param> ''' <param name="strFeatureClassName">A String that is the FeatureDataset name. Ex: "states"</param> ''' <param name="strFeatureDatasetName">A String that is the FeatureClass name. Ex: "arc"</param> ''' <remarks></remarks> Public Sub SetDataSource(ByVal mxDocument As ESRI.ArcGIS.ArcMapUI.IMxDocument, ByVal strDatasource As System.String, ByVal strFeatureClassName As System.String, ByVal strFeatureDatasetName As System.String) ' Create a new ArcInfoWorkspaceFactory Dim workspaceFactory As ESRI.ArcGIS.Geodatabase.IWorkspaceFactory=New ESRI.ArcGIS.DataSourcesFile.ArcInfoWorkspaceFactoryClass ' Get FeatureClass to be set as datasource Dim workspace As ESRI.ArcGIS.Geodatabase.IWorkspace=workspaceFactory.OpenFromFile(strDatasource, 0) ' Cast from IWorkspace to IFeatureWorkspace Dim featureWorkspace As ESRI.ArcGIS.Geodatabase.IFeatureWorkspace=CType(workspace, ESRI.ArcGIS.Geodatabase.IFeatureWorkspace) Dim featureDataset As ESRI.ArcGIS.Geodatabase.IFeatureDataset=featureWorkspace.OpenFeatureDataset(strFeatureClassName) Dim featureClassContainer As ESRI.ArcGIS.Geodatabase.IFeatureClassContainer=CType(featureDataset, ESRI.ArcGIS.Geodatabase.IFeatureClassContainer) Dim newFeatureClass As ESRI.ArcGIS.Geodatabase.IFeatureClass=featureClassContainer.ClassByName(strFeatureDatasetName) ' Get the focus map Dim map As ESRI.ArcGIS.Carto.IMap=mxDocument.FocusMap ' Cast from IMap to IActiveView Dim activeView As ESRI.ArcGIS.Carto.IActiveView=CType(map, ESRI.ArcGIS.Carto.IActiveView) ' Cast from IMap to IMapAdmin2 Dim mapAdmin2 As ESRI.ArcGIS.Carto.IMapAdmin2=CType(map, ESRI.ArcGIS.Carto.IMapAdmin2) ' Get the first layer in the map Dim layer As ESRI.ArcGIS.Carto.ILayer=map.Layer(0) Dim featureLayer As ESRI.ArcGIS.Carto.IFeatureLayer=CType(layer, ESRI.ArcGIS.Carto.IFeatureLayer) Dim oldFeatureClass As ESRI.ArcGIS.Geodatabase.IFeatureClass=featureLayer.FeatureClass ' Change FeatureClass of layer featureLayer.FeatureClass=newFeatureClass mapAdmin2.FireChangeFeatureClass(oldFeatureClass, newFeatureClass) ' Redraw the map activeView.Refresh() ' Update and Refresh TOC Dim newFeatureDataset As ESRI.ArcGIS.Geodatabase.IFeatureDataset=CType(featureClassContainer, ESRI.ArcGIS.Geodatabase.IFeatureDataset) featureLayer.Name=newFeatureDataset.Name + " " + newFeatureClass.AliasName Dim contentsView As ESRI.ArcGIS.ArcMapUI.IContentsView=mxDocument.CurrentContentsView contentsView.Refresh(Nothing) End Sub