Assembly: ESRI.ArcGISExplorer (in ESRI.ArcGISExplorer.dll) Version: 2.0.0.1500 (2.0.0.1500)
Syntax
C# |
---|
public sealed class Subtypes |
Visual Basic (Declaration) |
---|
Public NotInheritable Class Subtypes |
Remarks
The class does not apply to shapefiles or dBase files and only applies to geodatabase tables and feature classes which have been subtyped. A Subtypes object can be returned from the Subtypes property, but it is sensible to check whether a Table has been subtyped first using the IsSubtyped property. A Table can only have a single subtyped Column (SubtypeColumnName) but the remaining columns may have multiple domains defined, one for each subtype.
Conceptually the Subtypes object is similar to a CodedValueDomain in that it consists of value/name pairs. Each value represents the actual value stored on disk in the Table, and the name represents a descriptive lookup for a value. To lookup at value for a particular description use the GetSubtypeValue method, or conversely to look up the description for a value use the GetSubtypeName method. Alternatively to return all the defined subtypes use the GetSubtypeValueNamePairs method which returns a SortedList consisting of value/name pairs.
Currently it is not possible to access the following information relating to subtypes: default values, validation rules, relationship rules, and split/merge policies.
For more information geodatabase subtypes, see An overview of subtypes in the ArcGIS Desktop web help.
Examples
//Open the Buildings feature class Table buildingsTable = Table.OpenFileGeodatabaseTable(@"C:\Data\CalgaryData2.gdb", "Buildings"); //Access the Subtypes Subtypes buildingSubtypes = buildingsTable.Columns.Subtypes; //Lookup the stored value for the Commercial subtype int commercialSubtypeValue = buildingSubtypes.GetSubtypeValue("Commercial"); //Return the domain applied to the Classification column for the Commercial subtype CodedValueDomain commercialClassificationDomain = buildingsTable.Columns["Classification"].GetDomain("Commercial") as CodedValueDomain; //Lookup the value for Warehouse in the Commercial domain int warehouseCodedDomainValue = (int) commercialClassificationDomain.GetValue("Warehouse") ; //Construct SQL clause to search for all commercial buildings which also are classified as warehouses string commercialWarehouseWhereClause = string.Format("BLDG_CODE={0} AND Classification={1}", commercialSubtypeValue, warehouseCodedDomainValue); //Execute query RowCollection commercialWarehouseRows = buildingsTable.Search(new Filter(commercialWarehouseWhereClause)); //Prove that the search was successful by examining one of the results if (commercialWarehouseRows.Count > 0) { Row firstResultRow = commercialWarehouseRows.GetFirst(); //Print the stored BLDG_CODE value System.Diagnostics.Debug.Print(firstResultRow.Values["BLDG_CODE"].ToString()); //Prints "6" //Print the name stored in the subtypes for this value System.Diagnostics.Debug.Print(firstResultRow.Values.GetCodedName("BLDG_CODE")); //Prints "Commercial" //Print the stored Classification value System.Diagnostics.Debug.Print(firstResultRow.Values["Classification"].ToString()); //Prints "3" //Print the name stored in the System.Diagnostics.Debug.Print(firstResultRow.Values.GetCodedName("Classification")); //Prints "Warehouse" }
'Open the Buildings feature class Dim buildingsTable As Table = Table.OpenFileGeodatabaseTable("C:\Data\CalgaryData2.gdb", "Buildings") 'Access the Subtypes Dim buildingSubtypes As Subtypes = buildingsTable.Columns.Subtypes 'Lookup the stored value for the Commercial subtype Dim commercialSubtypeValue As Integer = buildingSubtypes.GetSubtypeValue("Commercial") 'Return the domain applied to the Classification column for the Commercial subtype Dim commercialClassificationDomain As CodedValueDomain = DirectCast(buildingsTable.Columns.Item("Classification").GetDomain("Commercial"), CodedValueDomain) 'Lookup the value for Warehouse in the Commercial domain Dim warehouseCodedDomainValue As Integer = CType(commercialClassificationDomain.GetValue("Warehouse"), Integer) 'Construct SQL clause to search for all commercial buildings which also are classified as warehouses Dim commercialWarehouseWhereClause As String = String.Format("BLDG_CODE={0} AND Classification={1}", commercialSubtypeValue, warehouseCodedDomainValue) 'Execute query Dim commercialWarehouseRows As RowCollection = buildingsTable.Search(New Filter(commercialWarehouseWhereClause)) 'Prove that the search was successful by examining one of the results If commercialWarehouseRows.Count > 0 Then Dim firstResultRow As Row = commercialWarehouseRows.GetFirst() 'Print the stored BLDG_CODE value System.Diagnostics.Debug.Print(firstResultRow.Values.Item("BLDG_CODE").ToString()) 'Prints "6" 'Print the name stored in the subtypes for this value System.Diagnostics.Debug.Print(firstResultRow.Values.GetCodedName("BLDG_CODE")) 'Prints "Commercial" 'Print the stored Classification value System.Diagnostics.Debug.Print(firstResultRow.Values.Item("Classification").ToString()) 'Prints "3" 'Print the name stored in the System.Diagnostics.Debug.Print(firstResultRow.Values.GetCodedName("Classification")) 'Prints "Warehouse" End If