打开数据库所在文件夹
FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
folderBrowserDialog.Description = "打开GDB文件夹";
if (DialogResult.OK == folderBrowserDialog.ShowDialog())
{
if (Directory.Exists(folderBrowserDialog.SelectedPath))
{
if (folderBrowserDialog.SelectedPath.ToUpper().Contains(".GDB"))
{
openFullPath = folderBrowserDialog.SelectedPath;
}
}
}
IFeatureWorkspace featureWorkspace;
IWorkspaceFactory workspaceFactory;
try
{
IFeatureLayer pFeatureLayer = new FeatureLayerClass();
IWorkspace pWorkspace;
workspaceFactory = new FileGDBWorkspaceFactoryClass();
//加载独立要素类,若无则不执行while循环
pWorkspace = workspaceFactory.OpenFromFile(openFullPath, 0);
featureWorkspace = pWorkspace as IFeatureWorkspace;
IEnumDataset Temp_AllIndependentFeatureClass = pWorkspace.get_Datasets(esriDatasetType.esriDTFeatureClass);
IFeatureClass Each_IndependentFeatureClass = Temp_AllIndependentFeatureClass.Next() as IFeatureClass;
while (Each_IndependentFeatureClass != null)
{
pFeatureLayer = new FeatureLayerClass();
pFeatureLayer.FeatureClass = featureWorkspace.OpenFeatureClass(Each_IndependentFeatureClass.AliasName);
pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;
axMapControl1.AddLayer(pFeatureLayer as ILayer);
axMapControl1.Refresh();
Each_IndependentFeatureClass = Temp_AllIndependentFeatureClass.Next() as IFeatureClass;
}
// 如果数据集是IFeatureDataset,则遍历它下面的子类
// 打开工作空间并遍历数据集
pWorkspace = workspaceFactory.OpenFromFile(openFullPath, 0);
IEnumDataset pEnumDataset = pWorkspace.get_Datasets(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTFeatureDataset);
pEnumDataset.Reset();
IDataset pDataset = pEnumDataset.Next();
if (pDataset is IFeatureDataset)
{
IFeatureDataset pFeatureDataset = featureWorkspace.OpenFeatureDataset(pDataset.Name);
IEnumDataset pEnumDataset1 = pFeatureDataset.Subsets;
pEnumDataset1.Reset();
IDataset pDataset1 = pEnumDataset1.Next();
// 如果子类是FeatureClass,则添加到axMapControl1中
if (pDataset1 is IFeatureClass)
{
while (pDataset1 != null)
{
pFeatureLayer = new FeatureLayerClass();
pFeatureLayer.FeatureClass = featureWorkspace.OpenFeatureClass(pDataset1.Name);
pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName;
axMapControl1.Map.AddLayer(pFeatureLayer);
axMapControl1.ActiveView.Refresh();
pDataset1 = pEnumDataset1.Next();
}
}
else
{
MessageBox.Show("No FeatureLayer!");
}
}
}
catch
{
MessageBox.Show("加载GDB失败!", "提示");
}