AE--属性表添加字段,修改字段属性

来源:互联网 发布:web安全工程师 知乎 编辑:程序博客网 时间:2024/05/18 15:29

一、

 //定义新字段

            IField pField = new FieldClass();  

            //字段编辑
            IFieldEdit pFieldEdit = pField as IFieldEdit;  

            //新建字段名
            pFieldEdit.Name_2 = "A";  

            //获取图层
            IFeatureLayer pFeatureLayer = axMapControl1.Map.get_Layer(0) as IFeatureLayer;   
            IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;   
            IClass pTable = pFeatureClass as IClass;        //use ITable or IClass   
            pTable.AddField(pFieldEdit);   
            //set values of every feature's field-"name_cit" in the first layer   
            for (int i = 0; i < pFeatureClass.FeatureCount(null); i++)   
            {   
                IFeature pFeature = pFeatureClass.GetFeature(i);   
                pFeature.set_Value(pFeature.Fields.FindField("A"), "B");   //每个要素的“A”字段存储的都是“B”。
                pFeature.Store();   
            } 

二、

//修改字段属性(重)
        private void ChangeFieldValue(string pGetFieldName,string pGetFieldAliasName,int pGetFieldLength, esriFieldType FieldType, int FieldIndex,Form pForm)
        {
            try
            {
                pFeatureLayer = mlayer as IFeatureLayer;
                if (pGetFieldName != null || pGetFieldAliasName != null && pGetFieldLength != 0)
                {
                    ITable pTable = pFeatureLayer.FeatureClass as ITable;
                    IField pField = new FieldClass();
                    
                    IFieldEdit pFieldEdit = pField as IFieldEdit;//添加Temp字段
                    pFieldEdit.Name_2 = "temp";
                    pFieldEdit.AliasName_2 = pGetFieldAliasName;
                    pFieldEdit.Length_2 = pGetFieldLength;
                    pFieldEdit.Type_2 = FieldType;
                    pTable.AddField(pField);

                    VolFieldValue(pForm, FieldIndex);//为Temp字段传入修改字段值
                    ISchemaLock pSchemaLock = pTable as ISchemaLock;
                    pSchemaLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock);
                    pTable.DeleteField(pFeatureLayer.FeatureClass.Fields.get_Field(FieldIndex));//删除原修改字段
                    pSchemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);
                    pFieldEdit.Name_2 = pGetFieldName;
                    pFieldEdit.AliasName_2 = pGetFieldAliasName;
                    pFieldEdit.Length_2 = pGetFieldLength;
                    pFieldEdit.Type_2 = FieldType;
                    pTable.AddField(pField);//添加原字段同名字段

                    int tempIndex = 0;//获取创建Temp字段位置
                    for (int i = 0; i < pFeatureLayer.FeatureClass.Fields.FieldCount; i++)
                    {
                        if (pFeatureLayer.FeatureClass.Fields.get_Field(i).Name == "temp")
                        {
                            tempIndex = i;
                        }
                    }

                    VolFieldValue(pForm, tempIndex);//为创建修改字段同名字段赋值
                    pSchemaLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock);
                    pTable.DeleteField(pFeatureLayer.FeatureClass.Fields.get_Field(tempIndex));//删除创建Temp 字段
                    pSchemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);
                }
                else
                    return;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "提示信息");
            }
        }

 

       // 字段集体赋值函数
        private void VolFieldValue(int FiledIndex)
        {
            try
            {
                IFeatureCursor pFeatureCursor;
                pFeatureCursor = pFeatureLayer.FeatureClass.Search(null, false);
                IFeature pFeature;
                pFeature = pFeatureCursor.NextFeature();
                int pFieldCount = pFeatureLayer.FeatureClass.Fields.FieldCount;
                while (pFeature != null)
                {
                    if (pFeatureLayer.FeatureClass.Fields.get_Field(FiledIndex).ToString() == "Shape")
                    {
                        pFeature.set_Value(pFieldCount - 1, pFeature.Shape.GeometryType.ToString());
                    }
                    else
                        pFeature.set_Value(pFieldCount - 1, pFeature.get_Value(FiledIndex));
                    pFeature.Store();
                    pFeature = pFeatureCursor.NextFeature();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "提示信息");
            }
        }


       // 删除字段函数
        private void simpleButton4_Click(object sender, EventArgs e)
        {
            try
            {
                IFeatureLayer pDelFeaLay = axMapControl1.get_Layer(iLayerIndex) as IFeatureLayer;
                ITable pDelTable = pDelFeaLay.FeatureClass as ITable;
                ISchemaLock pSchemaLock = (ISchemaLock)pDelTable;
                pSchemaLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock);
                IField pDelField = pDelTable.Fields.get_Field(iFieldIndex);//实现数据独占,避免数据使用冲突,只对Geodatabase有效
                pDelTable.DeleteField(pDelField);
                pSchemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);//释放占有资源

                if (comboBoxEdit1.SelectedIndex != -1)
                {
                    ShowSelectField(sender, e);
                }
                else
                {
                    return;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "提示信息");
            }
        }

 /// <summary>
        /// 删除字段值
        /// </summary>
        /// <param name="pCurrentLayer"></param>
        /// <param name="fieldName"></param>
        public static bool DeleteILayerField(ILayer pCurrentLayer, string fieldName)
        {
            try
            {
                IFeatureLayer pFeatureLayer = (IFeatureLayer)pCurrentLayer;
                IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
                //
                int pFieldIndex = pFeatureClass.FindField(fieldName);
                IFields pFields = pFeatureClass.Fields;
                IField pField = pFields.get_Field(pFieldIndex);
                if (pField != null)
                {
                    pFeatureClass.DeleteField(pField);
                }
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

原创粉丝点击