IFieldEdit Example

      This function creates a new feature class in a supplied feature dataset by building all of the fields from scratch. 
      Note:
IFeatureClassDescription (or IObjectClassDescription if the table was being created at the workspace level) could be used to get the required fields, and they are used to get the InstanceClassID and ExtensionClassID.

public IFeatureClass IFieldEdit_Example(IFeatureDataset featureDataset, IDomain domain, String nameOfFeatureClass)
    {//create new Fields collection
        IFields fields = new FieldsClass();
        IFieldsEdit fieldsEdit = (IFieldsEdit)fields;
        fieldsEdit.FieldCount_2 = 4;

        //create FID Field
        IField fieldUserDefined = new FieldClass();
        IFieldEdit fieldEdit = (IFieldEdit)fieldUserDefined;

        fieldEdit.AliasName_2 = "FID";
        fieldEdit.Name_2 = "SE_ROW_ID";
        fieldEdit.Type_2 = esriFieldType.esriFieldTypeOID;
        fieldsEdit.set_Field(0,fieldUserDefined);

        //create Shape Field
        fieldUserDefined = new FieldClass();
        fieldEdit = (IFieldEdit)fieldUserDefined;

        //set up Geometry Definition
        IGeometryDef geometryDef = new GeometryDefClass();
        IGeometryDefEdit geometryDefEdit = (IGeometryDefEdit)geometryDef;
        geometryDefEdit.AvgNumPoints_2 = 5;
        geometryDefEdit.GeometryType_2 = ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline;
        geometryDefEdit.GridCount_2 = 1;
        geometryDefEdit.set_GridSize(0, 0); //Allow ArcGIS to determine valid grid values based on the features.
        geometryDefEdit.HasM_2 = false;
        geometryDefEdit.HasZ_2 = false;
        //note that the spatial ReferenceEquals will be inherited from the feature dataset.

        fieldEdit.Name_2 = "SHAPE";
        fieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
        fieldEdit.GeometryDef_2 = geometryDef;
        fieldEdit.IsNullable_2 = true;
        fieldEdit.Required_2 = true;
        fieldsEdit.set_Field(1, fieldUserDefined);

        //create small integer field with supplied domain
        fieldUserDefined = new FieldClass();
        fieldEdit = (IFieldEdit)fieldUserDefined;

        fieldEdit.DefaultValue_2 = 6;
        if (domain != null)
        {
            fieldEdit.Domain_2 = domain;
        }
        fieldEdit.DomainFixed_2 = true;
        fieldEdit.Editable_2 = true;
        fieldEdit.IsNullable_2 = false;
        fieldEdit.Name_2 = "population";
        fieldEdit.Type_2 = esriFieldType.esriFieldTypeSmallInteger;
        fieldsEdit.set_Field(2, fieldUserDefined);

        //create double field
        fieldEdit.AliasName_2 = "average income for 1999-2000";
        fieldEdit.Editable_2 = true;
        fieldEdit.IsNullable_2 = false;
        fieldEdit.Name_2 = "average_income";
        fieldEdit.Precision_2 = 2;
        fieldEdit.Scale_2 = 5;
        fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
        //Note: Lenght is only required for esriFieldType.esriFieldTypeString
        //fieldEdit.Length_2 = 50;
        fieldsEdit.set_Field(3, fieldUserDefined);

        Console.WriteLine("IFieldsEdit has a field count of {0}", fieldsEdit.FieldCount);

        IFeatureClassDescription fcDesc = new FeatureClassDescriptionClass();
        IObjectClassDescription ocDesc = (IObjectClassDescription)fcDesc;
        return featureDataset.CreateFeatureClass(nameOfFeatureClass, fields, ocDesc.InstanceCLSID, ocDesc.ClassExtensionCLSID, esriFeatureType.esriFTSimple, "SHAPE", "");
    }
posted @ 2013-04-11 21:22  刘朝样  阅读(316)  评论(0)    收藏  举报