public static IArray OrganizeMapWorkspaceAndLayer(IMap pMap) { IArray arrayClass = new ESRI.ArcGIS.esriSystem.ArrayClass(); IPropertySet propertySetClass = new PropertySetClass(); IFeatureLayer featureLayer = null; UID uid = new UIDClass(); uid.Value = "{40A9E885-5533-11d0-98BE-00805F7CED21}"; IEnumLayer layers = pMap.Layers[uid, true]; layers.Reset(); ILayer pLayer = layers.Next(); while (pLayer != null) { if (pLayer is IFeatureLayer) { featureLayer = pLayer as IFeatureLayer; IDataset featureClass = featureLayer.FeatureClass as IDataset; if (featureClass != null && !(featureClass is ICoverageFeatureClass)) { IWorkspace workspace = featureClass.Workspace; if (workspace is IFeatureWorkspace) { IPropertySet connectionProperties = workspace.ConnectionProperties; bool hasFindWorkspace = false; for (int i = 0; i < arrayClass.Count; i++) { PipeWorkspaceInfo workspaceInfo = arrayClass.Element[i] as PipeWorkspaceInfo; if (workspaceInfo.Workspace.ConnectionProperties.Equals(connectionProperties)) { workspaceInfo.AddClass(featureLayer.FeatureClass); hasFindWorkspace = true; break; } } if (hasFindWorkspace == false) { PipeWorkspaceInfo workspaceInfo = new PipeWorkspaceInfo(workspace); workspaceInfo.AddClass(featureLayer.FeatureClass); arrayClass.Add(workspaceInfo); } } } } pLayer = layers.Next(); } return(arrayClass); }
private void InitData() { _dataSet = new DataSet("管线配置"); _dataTable = new DataTable("管线图层"); DataColumn col = new DataColumn("Workspace", typeof(string)); col.Caption = "工作空间"; col.AllowDBNull = true; _dataTable.Columns.Add(col); col = new DataColumn("FeatureClass", typeof(string)); col.Caption = "要素类"; col.AllowDBNull = true; _dataTable.Columns.Add(col); col = new DataColumn("PipelineLayer", typeof(string)); col.Caption = "管线组"; col.AllowDBNull = true; _dataTable.Columns.Add(col); col = new DataColumn("BasicLayerInfo", typeof(string)); col.Caption = "具体图层"; col.AllowDBNull = true; _dataTable.Columns.Add(col); IArray pArrayClass = ConfigHelper.OrganizeMapWorkspaceAndLayer(_map); for (int i = 0; i < pArrayClass.Count; i++) { PipeWorkspaceInfo info = pArrayClass.Element[i] as PipeWorkspaceInfo; for (int j = 0; j < info.ClassArray.Count; j++) { IFeatureClass pClass = info.ClassArray.Element[j] as IFeatureClass; string pShortName = ConfigHelper.GetClassShortName(pClass); DataRow row = _dataTable.NewRow(); row[0] = info.Workspace.PathName; row[1] = pShortName; _dataTable.Rows.Add(row); } } gridControl1.DataSource = _dataTable; }