如何设置和修改层的数据源

本例要实现的是如何改变(或设置)一个层的数据源(Data Source)。主要用到IMapAdmin2接口。

l   要点

首先需要得到新数据源的IFeatureClass接口对象和当前要改变数据源的层的当前IFeatureClass接口对象,然后调用IMapAdmin2接口的FireChangeFeatureClass方法实现之。

l   程序说明

过程UICMD_ChageDataSource_Click是实现模块,调用过程ChangeLayerDataSource实现功能。

sNewFileName是层的新数据源的shape文件的完整文件名(包含)。

l   代码

Private Sub UICMD_ChageDataSource_Click()

    Dim pVBProject      As VBProject

    Dim sProjectName    As String

    Dim sNewFileName    As String

On Error GoTo ErrorHandler:

    Set pVBProject = ThisDocument.VBProject

    'Get MXD File Path

    sProjectName = pVBProject.FileName

    'Get Data File Path

    sNewFileName = sProjectName & "\..\..\..\..\data\country.shp"

    'Call Procedure

    ChangeLayerDataSource sNewFileName

    Exit Sub

ErrorHandler:

    MsgBox Err.Description

End Sub

Private Sub ChangeLayerDataSource(ByVal sNewFileName As String)

    Dim pWorkspaceFactory   As IWorkspaceFactory

    Dim pWorkspace          As IWorkspace

    Dim pFeatureWorkspace   As IFeatureWorkspace

    Dim pNewFeatureCls      As IFeatureClass

    Dim pOldFeatureCls      As IFeatureClass

    Dim pMxDocument         As IMxDocument

    Dim pMap                As IMap

    Dim pActiveView         As IActiveView

    Dim pMapAdmin2          As IMapAdmin2

    Dim pFeatureLayer       As IFeatureLayer

On Error GoTo ErrorHandler

    'Get Data FeatureClass

    Set pWorkspaceFactory = New ShapefileWorkspaceFactory

    Set pWorkspace = pWorkspaceFactory.OpenFromFile(sNewFileName & "\..\", 0)

    Set pFeatureWorkspace = pWorkspace

    Set pNewFeatureCls = pFeatureWorkspace.OpenFeatureClass("country")

    'Get Lay(0)'s FeatureClass

    Set pMxDocument = ThisDocument

    Set pMap = pMxDocument.FocusMap

    Set pMapAdmin2 = pMap

    Set pActiveView = pMap

    Set pFeatureLayer = pMap.Layer(0)

    Set pOldFeatureCls = pFeatureLayer.FeatureClass

    'Change Data Source

    Set pFeatureLayer.FeatureClass = pNewFeatureCls

    pMapAdmin2.FireChangeFeatureClass pOldFeatureCls, pNewFeatureCls

    pActiveView.Refresh

    'if want to change Display in Toc ,cancel these comment below

    'pFeatureLayer.Name = pNewFeatureCls.AliasName

    'pMxDocument.CurrentContentsView.Refresh 0    Exit Sub

ErrorHandler:

    MsgBox Err.Description

End Sub

posted on 2006-09-07 13:25  greatbird  阅读(1034)  评论(2)    收藏  举报

导航