#AE实现矢量数据的基本操作—属性表操作(IFeatureClass)

实现:字段添加、字段删除、字段查找、读取属性值:

1.字段添加:

首先查看IFeatureClass接口,其中有AddField方法可以添加字段。

而IFeatureLayer中存在FeatureClass属性直接获得IFeatureClass接口,使用AddField方法就可以添加字段。

但是AddField方法中需要一个IField对象。查看IField接口发现其中的属性不可写;(IFieldEdit中的属性可读可写

可以添加字段),于是使用IFieldEdit来创建IField对象(接口跳转),FieldClass实现了IFieldEdit和IField接口。

private void button1_Click(object sender, EventArgs e)
        {
            //获得MapControl控件中的图层
            IFeatureLayer mylayer = axMapControl1.Map.get_Layer(0) as IFeatureLayer;
            //查询帮助文档,获得图层属性表有IFeatureClass接口有操作矢量数据字段的属性和方法
            IFeatureClass myclass = mylayer.FeatureClass;
            IFieldEdit field = new FieldClass();
            field.Name_2 = "place";
            field.Type_2 = esriFieldType.esriFieldTypeString;
            field.Length_2 = 10;
            myclass.AddField(field as IField);
            MessageBox.Show("success");
        } 

2.删除字段:

//删除字段,根据一个矢量图层的矢量数据获得该矢量数据的IFields对象,
        //使用该对象的deleteField()方法删除一个指定索引位置的数据
        private void button2_Click(object sender, EventArgs e)
        {
            IFeatureLayer mylayer = axMapControl1.get_Layer(0) as IFeatureLayer;
            IFeatureClass myclass = mylayer.FeatureClass;
            IFields fds = myclass.Fields;
            MessageBox.Show(fds.ToString());
            IField fd = fds.get_Field(9);
            myclass.DeleteField(fd);
            MessageBox.Show("删除成功");
        } 

4.查找字段名:

 //查找字段名,返回字段对应的索引
        private void button3_Click(object sender, EventArgs e)
        {
            IFeatureLayer mylayer = axMapControl1.get_Layer(0) as IFeatureLayer;
            IFeatureClass myclass = mylayer.FeatureClass;
            int index = myclass.FindField("NAME");
            MessageBox.Show(index.ToString());
        } 

5.读取属性值:接口跳转:IFeatureLayer-->IFeatureClass-->IFeature-->IFeature.get_value(index);IFeatureClass.FindField(【字段名】)-->index

//读取某一个字段的属性值
        private void button4_Click(object sender, EventArgs e)
        {
            IFeatureLayer mylayer = axMapControl1.get_Layer(0) as IFeatureLayer;
            IFeatureClass myclass = mylayer.FeatureClass;

            IFeature fea = myclass.GetFeature(0);

            int index = myclass.FindField("NAME");
            string name = Convert.ToString(fea.get_Value(index));
            MessageBox.Show(name);
        }