Suite

Obtenir la valeur/la description d'un domaine ou d'un sous-type pour la valeur d'un champ donné ?

Obtenir la valeur/la description d'un domaine ou d'un sous-type pour la valeur d'un champ donné ?


J'ai besoin d'obtenir une valeur d'un IObject.Fields.Field à l'aide d'ArcObjects 10.x en utilisant les critères répertoriés ci-dessous :

  1. Si le champ est associé à un sous-type, je dois obtenir le nom/la description du sous-type en fonction de la valeur du champ.

  2. Si le champ est associé à un domaine de valeur codée, je dois obtenir le nom/la description du domaine en fonction de la valeur du champ.

  3. Si le champ n'a ni sous-type ni domaine associé, je souhaite que la valeur du champ elle-même soit renvoyée.

  4. Avoir cette fonctionnalité enveloppée dans un appel comme "ReadFieldValue(IObject obj, int fieldIndex) est préférable.


Ci-dessous ce que j'ai trouvé :

///  /// Obtient la valeur du champ de l'IObject. Vérifie les domaines de valeur /// codés, les sous-types ou simplement la valeur du champ brut. ///  /// ESRI IObject /// Index de champ pour IObject.Fields.Field ///  objet statique interne ReadFieldValue(IObject obj, int fieldIndex, bool ignoreDescription = false) { objet fieldValue = null; if (obj != null && fieldIndex > -1) { /// Par défaut la valeur du champ en premier, /// l'écrase si un sous-type ou un domaine /// est trouvé. fieldValue = obj.Value[fieldIndex]; if (fieldValue != DBNull.Value && ignoreDescription == false) { ISubtypes subtypes = obj.Class as ISubtypes; IRowSubtypes rowSubtypes = obj as IRowSubtypes; IField2 field = obj.Fields.Field[fieldIndex] as IField2 ; // Définir le domaine approprié en fonction du sous-type s'il existe un sous-type. IDomain domaine = nul ; if (field != null) { if (subtypes != null && subtypes.SubtypeFieldIndex > -1) { domain = subtypes.get_Domain(rowSubtypes.SubtypeCode, field.Name); } else { domaine = champ.Domaine; } } // Vérifiez d'abord un champ de sous-type if (sous-types != null && rowSubtypes != null && subtypes.SubtypeFieldIndex == fieldIndex) fieldValue = subtypes.get_SubtypeName(rowSubtypes.SubtypeCode); // S'il ne s'agit pas d'un champ de sous-type, recherchez un champ de domaine else if (domain != null) { ICodedValueDomain2 cvDomain = domain as ICodedValueDomain2; if (cvDomain != null) { for (int i = 0; i < cvDomain.CodeCount; i++) { if (cvDomain.get_Value(i).Equals(fieldValue)) { fieldValue = cvDomain.get_Name(i); Pause; } } } } } } return fieldValue; }