thaluska

workspacefactory/featuredataset confusion

Discussion created by thaluska on Feb 17, 2011
Hello
I'm new to vb.net and arcobjects, using arcgis10. I have posted a subroutine below that should load featureclasses from one or many featuredatasets inside a single geodatabase.  The geodatabase has a featuredataset for each parcel.  Inside each featuredataset there are several inundation polygons for that parcel.  The for loop is supposed to loop through each selected parcel and load the specified inundation area from the geodatabase. After running the code with 2 parcels selected, it appears that inundation areas for both parcels are loaded into the map document, but the names of the layers are the same, when they should be unique. When I turn off one inundation polygon the other still remains, but one I turned off won't turn back on and the source path breaks. Or, when viewing the layers in the table of contents by order displayed and then by source, the source path breaks. Also one of the parcel inundation layer disappears completely. I've inserted msgbox comments throughout to confirm the names of the featureclasses and other variables, they all appear correct when running the code. The tables appear to be loading correctly, but not the featureclasses.  I tried setting all variables to nothing at the bottom of the loop to try to clear this up, but no luck.  If I retrieve a featureclass from one featuredataset inside a geodatabase and then switch to a different featuredataset in the same geodatabase, do I have to somehow close the first featurdataset?  I presume I can use the same workspace factory for both featuredatasets within the same geodatabase. If anyone can see something I'm doing wrong, please advise.
many thanks.
tlh

Public Sub LoadParcel()
        Try
   Dim pMxDoc As IMxDocument = DirectCast(m_app.document, IMxDocument)
            Dim pMap As IMap = pMxDoc.FocusMap
            Dim pFLayer As ESRI.ArcGIS.Carto.IFeatureLayer = New FeatureLayer
            Dim pWSFactory As ESRI.ArcGIS.Geodatabase.IWorkspaceFactory = New FileGDBWorkspaceFactory
            Dim pFWS As ESRI.ArcGIS.Geodatabase.IFeatureWorkspace
            Dim pFDSet As ESRI.ArcGIS.Geodatabase.IFeatureDataset
            Dim pFCContainer As ESRI.ArcGIS.Geodatabase.IFeatureClassContainer
            Dim pFClass As ESRI.ArcGIS.Geodatabase.IFeatureClass
            Dim tableCollection As ITableCollection = TryCast(pMap, ITableCollection)
            Dim pTable As ITable
            Dim strGDBName As String = strDefaultWorkspace & "\Processed_Data\ShorelineManagementTool_" & LStageDat & ".gdb"
            Dim OneParcelList() As String = SelParc.Split(",")
For i = 0 To intNumParcelsSel - 1
                Dim intParcNum As Integer = OneParcelList(i)
                MsgBox("intParcNum: " & intParcNum)
                Dim strFDSetName As String = "InundationAreasParcel_" & intParcNum
                MsgBox("strFDSetName: " & strFDSetName)
                Dim dblStage As Double = LStage
                intInundationStage = (Int((dblStage + 0.05) * 10) * 10)
                Dim strFClassName As String = "p" & intParcNum & intInundationStage & "_polygon"
                MsgBox("strFClassName: " & strFClassName)
                pFWS = pWSFactory.OpenFromFile(strGDBName, 0)
                pFDSet = pFWS.OpenFeatureDataset(strFDSetName)
                pFCContainer = CType(pFDSet, ESRI.ArcGIS.Geodatabase.IFeatureClassContainer)
                pFClass = pFCContainer.ClassByName(strFClassName)
                pFLayer.FeatureClass = pFClass
                pFLayer.Name = strFClassName
                pMap.AddLayer(pFLayer)
                'pFLayer.Name = strFClassName
                MsgBox("pFLayer.Name: " & pFLayer.Name)
                pTable = pFWS.OpenTable("p" & intParcNum & intInundationStage & "_cf")
                tableCollection.AddTable(pTable)
                strFDSetName = Nothing
                strFClassName = Nothing
                pFDSet = Nothing
                pFCContainer = Nothing
                pFClass = Nothing
                pFLayer.FeatureClass = Nothing
                pFLayer.Name = Nothing
                pTable = Nothing
            Next
       Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
End Class

Outcomes