Alih-alih mendapatkan dataset:
// Retrieve the first feature dataset from the workspace.
IEnumDatasetName enumDatasetName = workspace.get_DatasetNames
(esriDatasetType.esriDTFeatureDataset);
Anda bisa mendapatkan kelas fitur dengan:
IEnumDatasetName enumDatasetName = workspace.get_DatasetNames(esriDatasetType.esriDTFeatureClass);
Lihat utas ini:
Mengekspor / mengimpor kelas fitur geodatabase ke file XML
MEMPERBARUI
Anda bisa mendapatkan nama fc dalam dataset geodatabase / fitur menggunakan kode ini (solusi di VB.NET):
Sub TestGetContents()
Try
Dim pGxApp As IGxApplication
Dim Type As System.Type = System.Type.GetTypeFromCLSID(GetType(ESRI.ArcGIS.Framework.AppRefClass).GUID)
pGxApp = TryCast(Activator.CreateInstance(Type), ESRI.ArcGIS.CatalogUI.IGxApplication)
'select geodatabase in Catalog tree
If Not TypeOf pGxApp.SelectedObject Is IGxDatabase Then
Debug.Print("select a geodb first")
Exit Sub
End If
Dim c As Collection
c = GetContents(pGxApp.SelectedObject)
Dim l As Long
For l = 1 To c.Count
Dim pName As IName
pName = c.Item(l)
If TypeOf pName Is IFeatureClassName Then
Dim pFC As IFeatureClass
pFC = pName.Open
MessageBox.Show(pFC.AliasName)
ElseIf TypeOf pName Is IFeatureDatasetName Then
Dim pDSName As IDatasetName
pDSName = pName
MessageBox.Show(pDSName.Name)
End If
Next l
Catch ex As Exception
MessageBox.Show("Caught an unspecified error in the calling code: " & vbCrLf & ex.ToString)
End Try
End Sub
Function GetContents(ByVal pGxDB As IGxDatabase) As Collection
Try
Dim c As New Collection
Dim pEnumDSName As IEnumDatasetName
pEnumDSName = pGxDB.Workspace.DatasetNames(esriDatasetType.esriDTAny)
Dim pDSName As IDatasetName
pDSName = pEnumDSName.Next
Do Until pDSName Is Nothing
If TypeOf pDSName Is IFeatureClassName Then
c.Add(pDSName)
ElseIf TypeOf pDSName Is IFeatureDatasetName Then
c.Add(pDSName)
AddSubNames(pDSName, c)
End If
pDSName = pEnumDSName.Next
Loop
GetContents = c
Catch ex As Exception
MessageBox.Show("Caught an unspecified error in the calling code: " & vbCrLf & ex.ToString)
End Try
End Function
Sub AddSubNames(ByVal pDSName1 As IDatasetName, ByVal c As Collection)
Try
Dim pEnumDSName As IEnumDatasetName
pEnumDSName = pDSName1.SubsetNames
pEnumDSName.Reset()
Dim pDSName2 As IDatasetName
pDSName2 = pEnumDSName.Next
Do Until pDSName2 Is Nothing
If TypeOf pDSName2 Is IFeatureClassName Then
c.Add(pDSName2)
End If
pDSName2 = pEnumDSName.Next
Loop
Catch ex As Exception
MessageBox.Show("Caught an unspecified error in the calling code: " & vbCrLf & ex.ToString)
End Try
End Sub
Kode direferensikan dari pos ini:
ArcObjects - enumerating kelas fitur dan dataset dalam geodatabase
IEnumDatasetName
objek? The(IName)name.NameString
selalu mengembalikan sebuah string kosong. Saya juga mendapatkan pengecualian (Pengecualian dari HRESULT: 0x80040220) dariGenerateNameMapping
dengan contoh kode saat ini ...