private IFeature GetFeature(DataRow rowError, string strLayerName) { IMap theMap = this.m_HookHelper.FocusMap; MapLayersController mapController = new MapLayersController(theMap); enumErrorType errType = (enumErrorType)Convert.ToInt32(rowError["ErrorType"]); switch (errType) { case enumErrorType.Topology: { ITopologyLayer topoLayerTarget = mapController.GetLayer(strLayerName) as ITopologyLayer; if (topoLayerTarget == null) return null; ITopology topology = topoLayerTarget.Topology; IErrorFeatureContainer errFeatureContainer = topology as IErrorFeatureContainer; esriTopologyRuleType ruleType = (esriTopologyRuleType)Convert.ToInt32( rowError[Field_Name_TopologyRuleType]); //string strGeoType = rowError[Field_Name_TopologyGeometryType] as string; //esriGeometryType geoType = (strGeoType == "��" ? esriGeometryType.esriGeometryPoint : (strGeoType == "��" ? esriGeometryType.esriGeometryLine : esriGeometryType.esriGeometryPolygon)); esriGeometryType geoType = (esriGeometryType)Convert.ToInt32(rowError[Field_Name_TopologyGeometryType]); int sourceClassID = (int)rowError["SourceLayerID"]; int sourceOID = (int)rowError["OID"]; int targetClassID = (int)rowError["TargetLayerID"]; int targetOID = Convert.ToInt32( rowError["OID2"]); return errFeatureContainer.get_ErrorFeature((topology as IGeoDataset).SpatialReference, ruleType, geoType, sourceClassID, sourceOID, targetClassID, targetOID) as IFeature; } break; case enumErrorType.Normal: { IFeatureLayer flyrTarget = mapController.GetLayer(strLayerName) as IFeatureLayer; if (flyrTarget == null) return null; // ��Ϊ���ȴ�OID���Ҷ�λ if (rowError.Table.Columns.Contains(Field_Name_TargetOID) && rowError[Field_Name_TargetOID] != DBNull.Value) { return flyrTarget.FeatureClass.GetFeature((int)rowError[Field_Name_TargetOID]); } else if (rowError.Table.Columns.Contains(Field_Name_TargetBSM) && !string.IsNullOrEmpty(rowError[Field_Name_TargetBSM] as string)) { IQueryFilter qFilter = new QueryFilterClass(); IFields fields = flyrTarget.FeatureClass.Fields; int fieldIndex = fields.FindField("BSM"); if (fieldIndex < 0) return null; IField bsmField = fields.get_Field(fieldIndex); if (bsmField.Type == esriFieldType.esriFieldTypeInteger) { qFilter.WhereClause = string.Format("BSM={0}", rowError[Field_Name_TargetBSM]); } else { qFilter.WhereClause = string.Format("BSM='{0}'", rowError[Field_Name_TargetBSM]); } IFeatureCursor fCursor = flyrTarget.FeatureClass.Search(qFilter, false); return fCursor.NextFeature(); } else { return null; } } default: return null; } }