[GIS] How to incorporate drop-down list within cells of shapefile attribute table using ArcGIS Desktop

arcgis-desktoppythonshapefile

A question has been brought to my attention. When working with a shapefile within either 10 or 10.1. Is it possible to create a python script or some sort of programming language to accomplish this task;

An attribute table consists of 3 columns with multiple rows. Is there a way to set a list for each column that may be used when clicking within each cell. I know this can be done within an edit session with domain and subtypes but can it be done just within the Attribute table itself. By way of scripting.

Reason, this would provide a streamline process for individuals who do not know much about ArcGIS and would save the process of an edit session and potential of misspellings and what not. The easy fix for a GIS person would be to just use Domains and Subtypes. But the question is, can it be done differently?

Best Answer

You will want to work with subtypes in a file geodatabase--you cannot create subtype definitions for shapefiles. Look at domains and subtypes on the ArcGIS help page to learn more. The following script from ArcGIS 10.0 help shows how to create subtypes programmatically:

# Name: ManageSubtypes.py
# Purpose: Create a subtype definition
# Author: ESRI

# Import system modules
import arcpy
from arcpy import env

try:
    # Set the workspace (to avoid having to type in the full path to the data every time)
    env.workspace =  "C:/data/Montgomery.gdb"

    # Set local parameters
    inFeatures = "water/fittings"

    # Process: Set Subtype Field...
    arcpy.SetSubtypeField_management(inFeatures, "TYPECODE")

    # Process: Add Subtypes...
    # Store all the suptype values in a dictionary with the subtype code as the "key" and the 
    # subtype description as the "value" (stypeDict[code])
    stypeDict = {"0": "Unknown", "1": "Bend", "2": "Cap", "3": "Cross", "4": "Coupling",\
                 "5": "Expansion joint", "6": "Offset", "7":"Plug", "8": "Reducer",\
                 "9": "Saddle", "10": "Sleeve", "11": "Tap", "12": "Tee", "13": "Weld", "14": "Riser"} 

    # use a for loop to cycle through the dictionary
    for code in stypeDict:
        arcpy.AddSubtype_management(inFeatures, code, stypeDict[code])     

    # Process: Set Default Subtype...
    arcpy.SetDefaultSubtype_management(inFeatures, "4")

except Exception, e:
    # If an error occurred, print line number and error message
    import traceback, sys
    tb = sys.exc_info()[2]
    print "Line %i" % tb.tb_lineno
    print e.message
Related Question