예제 #1
0
        /// <summary>
        /// 添加字段
        /// </summary>
        /// <param name="featureClass">要素类</param>
        /// <param name="fieldName">字段名</param>
        /// <param name="filedType">字段类型</param>
        static private int AddField(IFeatureClass featureClass, string fieldName, esriFieldType filedType, int precisioin)
        {
            int fieldIndex = featureClass.Fields.FindField(fieldName);

            //判断字段是否存在,若存在则不进行任何操作
            if (fieldIndex > -1)
            {
                return(fieldIndex);
            }

            //添加字段
            IClass      pClass     = featureClass as IClass;
            IFieldsEdit fieldsEdit = featureClass.Fields as IFieldsEdit;
            IField      field      = new FieldClass();
            IFieldEdit  fieldEdit  = field as IFieldEdit;

            fieldEdit.Name_2 = fieldName;
            fieldEdit.Type_2 = filedType;
            if (filedType == esriFieldType.esriFieldTypeSmallInteger)
            {
                fieldEdit.Precision_2    = precisioin;
                fieldEdit.Scale_2        = 0;
                fieldEdit.DefaultValue_2 = 0;
            }
            if (filedType == esriFieldType.esriFieldTypeString)
            {
                fieldEdit.Precision_2 = precisioin;
            }
            pClass.AddField(field);
            return(featureClass.Fields.FindField(fieldName));
        }
        /// <summary>
        /// 要素添加属性字段
        /// </summary>
        /// <param name="pFeatureClass">待添加字段的要素类</param>
        /// <param name="name">添加字段的名称</param>
        /// <param name="aliasName">添加字段的别名</param>
        /// <param name="FieldType">添加字段的类型</param>
        /// <returns>添加成功返回1,否则返回0</returns>
        public static int AddField(IFeatureClass pFeatureClass, string name, string aliasName, esriFieldType FieldType)
        {
            //若存在,则不需添加
            if (pFeatureClass.Fields.FindField(name) > -1)
            {
                return(0);
            }
            try
            {
                IField     pField     = new FieldClass();
                IFieldEdit pFieldEdit = pField as IFieldEdit;
                pFieldEdit.AliasName_2 = aliasName;
                pFieldEdit.Name_2      = name;
                pFieldEdit.Type_2      = FieldType;

                IClass pClass = pFeatureClass as IClass;
                pClass.AddField(pField);
                return(1);
            }
            catch (COMException ex)
            {
                MessageBox.Show(ex.Message);
                //SysLogHelper.WriteOperationLog("属性表添加字段错误", ex.Source, "数据编辑");
                PS.Plot.Common.LogHelper.WriteLog(typeof(Form_Attribute), ex, "0304");
                return(0);
            }
        }
예제 #3
0
파일: FieldOpt.cs 프로젝트: jonhzy163/WLib
        /// <summary>
        /// 向已有表格添加新字段,若字段存在则不添加,并返回字段索引
        /// (注意,向已有表格添加字段使用IClass.AddFiled,而在创建表格时设置字段使用IFieldsEdit.AddField)
        /// </summary>
        /// <param name="table">操作的表格</param>
        /// <param name="name">字段名</param>
        /// <param name="aliasName">字段别名</param>
        /// <param name="fieldType">字段类型</param>
        /// <param name="length">字段长度,若为0则不设置长度(使用默认长度)</param>
        /// <returns>添加的字段的索引</returns>
        public static int AddField(this ITable table, string name, string aliasName, esriFieldType fieldType, int length = 0)
        {
            //若存在,则不需添加
            int index = -1;

            if ((index = table.Fields.FindField(name)) > -1)
            {
                return(index);
            }

            IField     field     = new FieldClass();
            IFieldEdit fieldEdit = field as IFieldEdit;

            fieldEdit.Name_2      = name;
            fieldEdit.AliasName_2 = aliasName;
            fieldEdit.Type_2      = fieldType;
            if (length > 0)
            {
                fieldEdit.Length_2 = length;
            }
            IClass cls = table as IClass;

            cls.AddField(fieldEdit); //此处使用IClass.AddFiled方法,不使用IFieldsEdit.AddField方法

            return(cls.FindField(name));
        }
예제 #4
0
        //private IFeatureClass Create_PointFeature(List<Point3D> PointList,string FileFullPath)
        //{
        //    string FileName = System.IO.Path.GetFileName(FileFullPath);
        //    IFeatureClass MptFeatureClass;


        //}


        private void Complete_PropertyTable(ref IFeatureClass pFeatureClass, List <Point3D> PointList)
        {
            string[] FieldName = { "ptName", "X", "Y", "Z" };
            IClass   pTable    = pFeatureClass as IClass;   //use ITable or IClass

            for (int i = 0; i < FieldName.Length; i++)
            {
                IField     pField = new FieldClass();
                IFieldEdit pFieldEdit;
                pFieldEdit        = pField as  IFieldEdit;
                pFieldEdit.Name_2 = FieldName[i];
                if (i == 0)
                {
                    pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
                }
                else
                {
                    pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
                }
                pTable.AddField(pFieldEdit);
            }

            for (int i = 0; i < pFeatureClass.FeatureCount(null); i++)
            {
                IFeature pFeature = pFeatureClass.GetFeature(i);
                pFeature.set_Value(pFeatureClass.FindField(FieldName[0]), PointList[i].ID);
                pFeature.set_Value(pFeatureClass.FindField(FieldName[1]), PointList[i].X);
                pFeature.set_Value(pFeatureClass.FindField(FieldName[2]), PointList[i].Y);
                pFeature.set_Value(pFeatureClass.FindField(FieldName[3]), PointList[i].Z);
                pFeature.Store();
            }
        }
예제 #5
0
        //添加字段并赋值
        private void AddField()
        {
            //添加温度字段
            string        HighTemp    = "HighTemperature";
            string        LowTemp     = "LowTemperature";
            IFeatureLayer lyrProVince = Utilities.GetLayerByName("省市", axMapControl1.Map) as IFeatureLayer;
            IFeatureClass ProClass    = lyrProVince.FeatureClass;;

            if (ProClass.Fields.FindField(HighTemp) < 0)
            {
                IField     pField     = new FieldClass();
                IFieldEdit pFieldEdit = pField as IFieldEdit;
                pFieldEdit.Name_2 = HighTemp;
                pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
                IClass pClass = ProClass as IClass;
                pClass.AddField(pFieldEdit);
            }
            if (ProClass.Fields.FindField(LowTemp) < 0)
            {
                IField     pField     = new FieldClass();
                IFieldEdit pFieldEdit = pField as IFieldEdit;
                pFieldEdit.Name_2 = LowTemp;
                pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
                IClass pClass = ProClass as IClass;
                pClass.AddField(pFieldEdit);
            }
            //为字段赋值
            string[]            provinces = new string[] { "黑龙江省", "内蒙古自治区", "新疆维吾尔自治区", "吉林省", "甘肃省", "河北省", "北京市", "山西省", "天津市", "陕西省", "宁夏回族自治区", "青海省", "辽宁省", "山东省", "西藏自治区", "河南省", "江苏省", "安徽省", "四川省", "湖北省", "重庆市", "上海市", "浙江省", "湖南省", "江西省", "云南省", "贵州省", "广西壮族自治区", "福建省", "台湾省", "海南省", "广东省", "香港特别行政区", "澳门" };
            TomorrowWeatherInfo weath;

            IFeatureCursor featCursor  = null;
            IQueryFilter   queryFilter = new QueryFilterClass();

            for (int i = 0; i < provinces.Length; i++)
            {
                string selCity     = provinces[i];
                string whereClause = "[NAME] = '" + selCity + "'";
                queryFilter.WhereClause = whereClause;
                featCursor = ProClass.Search(queryFilter, false);
                IFeature pFeature = featCursor.NextFeature();
                string   pcity    = Utilities.getCity(selCity);
                weath = new TomorrowWeatherInfo(pcity);

                Random random = new Random();//测试用随机数产生器
                if (pFeature != null)
                {
                    pFeature.set_Value(pFeature.Fields.FindField("HighTemperature"), random.Next(20, 40));
                    pFeature.set_Value(pFeature.Fields.FindField("LowTemperature"), random.Next(1, 20));
                    pFeature.Store();
                }
            }
            IGeoFeatureLayer geoProVince = Utilities.GetLayerByName("省市", axMapControl1.Map) as IGeoFeatureLayer;

            setColor(geoProVince);
        }
예제 #6
0
        /// <summary>
        /// 给要素类 添加字段  XZSDM  XZSMC
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="tables"></param>
        public static void AddFields(string filePath, List <StockTable> tables)
        {
            IWorkspaceFactory workspaceFactory = new AccessWorkspaceFactoryClass();
            IWorkspace        workspace        = workspaceFactory.OpenFromFile(filePath, 0);

            foreach (var table in tables)
            {
                IFeatureClass featureClass = workspace.GetFeatureClass(table.Name);
                if (featureClass != null)
                {
                    IClass      pClass     = featureClass as IClass;
                    IFieldsEdit fieldsEdit = featureClass.Fields as IFieldsEdit;
                    IField      field      = null;
                    IFieldEdit  fieldedit  = null;
                    var         index      = featureClass.Fields.FindField("XZSDM");

                    if (index == -1)
                    {
                        field            = new FieldClass();
                        fieldedit        = field as IFieldEdit;
                        fieldedit.Type_2 = esriFieldType.esriFieldTypeString;
                        fieldedit.Name_2 = "XZSDM";
                        pClass.AddField(field);
                    }
                    index = featureClass.Fields.FindField("XZSMC");
                    if (index == -1)
                    {
                        field            = new FieldClass();
                        fieldedit        = field as IFieldEdit;
                        fieldedit.Type_2 = esriFieldType.esriFieldTypeString;
                        fieldedit.Name_2 = "XZSMC";
                        pClass.AddField(field);
                    }
                }
            }
            IWorkspaceFactoryLockControl factorylock = workspaceFactory as IWorkspaceFactoryLockControl;

            if (factorylock.SchemaLockingEnabled)
            {
                factorylock.DisableSchemaLocking();
            }
        }
예제 #7
0
        public static void AddField(this IFeatureClass featureClass, IField addField)
        {
            IClass      pClass     = featureClass as IClass;
            IFieldsEdit fieldsEdit = featureClass.Fields as IFieldsEdit;

            //IField field = new FieldClass();
            //IFieldEdit2 fieldEdit = field as IFieldEdit2;
            //fieldEdit.Type_2 = addField.Type;
            //fieldEdit.Name_2 = addField.Name;
            //fieldEdit.AliasName_2 = addField.AliasName;
            pClass.AddField(addField);
        }
예제 #8
0
        /// <summary>
        /// 对房屋进行编码
        /// </summary>
        /// <param name="pMapControl"></param>
        /// <param name="cbxLayerName"></param>
        public static void HouseCode(IMap pMapControl, ComboBoxEx cbxLayerName)
        {
            IFeatureLayer pFeatureLayer = (IFeatureLayer)GetLayerByName(pMapControl, cbxLayerName.Text);
            //遍历字段
            IField  pField    = null;
            IFields pFields   = pFeatureLayer.FeatureClass.Fields;
            bool    pRoadCode = false;
            bool    pEntiID   = false;

            //匹配正则表达式,字段字符串必须得全是字母,把ENTIID2,ENTIID3,ENTIID4等剔除掉
            System.Text.RegularExpressions.Regex pRex = new System.Text.RegularExpressions.Regex(@"^[A-Za-z]+$");

            for (int i = 0; i < pFields.FieldCount - 1; i++)
            {
                pField = pFields.get_Field(i);
                if (pField.AliasName.Contains("路线编码"))
                {
                    pRoadCode = true;
                }
                if (pField.AliasName.Contains("ENTIID") && pRex.IsMatch(pField.AliasName.ToString()))
                {
                    pEntiID = true;
                }
            }
            if (pRoadCode)
            {
                MessageBox.Show("请按照道路实体编码规则编码!");
            }
            else
            {
                if (pEntiID)
                {
                    //字段中含有ENTIID字段,直接进行guid编码即可
                    CreateHouseCode(pFeatureLayer, "ENTIID");
                }
                else
                {
                    //字段中没有ENTIID字段,先增加ENTIID再进行guid编码即可
                    IClass     pTable     = pFeatureLayer.FeatureClass as IClass;
                    IField     pField2    = new FieldClass();
                    IFieldEdit pFieldEdit = pField2 as IFieldEdit;
                    pFieldEdit.Name_2 = "ENTIID";
                    pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
                    pTable.AddField(pField2);
                    //对街道、房屋实体进行编码
                    CreateHouseCode(pFeatureLayer, "ENTIID");
                }
            }
            MessageBox.Show("街道房屋实体编码成功!");
        }
        //向属性表添加字段
        public static void AddField(IFeatureClass pFeatureClass, string name, esriFieldType field)
        {
            if (pFeatureClass.Fields.FindField(name) > -1)
            {
                MessageBox.Show("Field " + name + " already exists.");
                return;
            }
            IField     pField     = new FieldClass();
            IFieldEdit pFieldEdit = pField as IFieldEdit;

            pFieldEdit.Name_2 = name;
            pFieldEdit.Type_2 = field;
            IClass pClass = pFeatureClass as IClass;

            pClass.AddField(pField);
        }
예제 #10
0
 public override void OnClick()
 {
     try
     {
         FrmFieldProperties view = new FrmFieldProperties();
         if (view.ShowDialog() == DialogResult.OK)
         {
             IClass pClass = _view.CurrentGridView.FeatureLayer.FeatureClass;
             pClass.AddField(view.NewField);
             _view.CurrentGridView.VirtualGridView.AddColumnToGrid(view.NewField);
         }
     }
     catch (Exception exception)
     {
         MessageBox.Show(exception.Message);
     }
 }
예제 #11
0
        private void AddField(IFeatureClass pFeatureClass, string name, string aliasName, esriFieldType FieldType)
        {
            //若存在,则不需添加
            if (pFeatureClass.Fields.FindField(name) > -1)
            {
                return;
            }
            IField     pField     = new FieldClass();
            IFieldEdit pFieldEdit = pField as IFieldEdit;

            pFieldEdit.AliasName_2 = aliasName;
            pFieldEdit.Name_2      = name;
            pFieldEdit.Type_2      = FieldType;

            IClass pClass = pFeatureClass as IClass;

            pClass.AddField(pField);
        }
        /// <summary>
        /// 添加字段
        /// </summary>
        /// <param name="pFeatureClass"></param>
        /// <param name="name"></param>
        /// <param name="aliasName"></param>
        /// <param name="FieldType"></param>
        /// <returns></returns>
        public static bool AddField(IFeatureClass pFeatureClass, string name, string aliasName, esriFieldType FieldType)
        {
            //若存在,则不需添加
            if (pFeatureClass.Fields.FindField(name) > -1)
            {
                return(false);
            }
            IField     pField     = new FieldClass();
            IFieldEdit pFieldEdit = pField as IFieldEdit;

            pFieldEdit.AliasName_2 = aliasName;
            pFieldEdit.Name_2      = name;
            pFieldEdit.Type_2      = FieldType;
            IClass pClass = pFeatureClass as IClass;

            pClass.AddField(pField);
            return(true);
        }
예제 #13
0
        public static void AddFeildToMeery(IFeatureClass featureCls)
        {
            ISchemaLock schemaLock = featureCls as ISchemaLock;

            schemaLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock);

            //
            var    field    = CreateStringField("Name", "", 8);
            IClass addFeild = (IClass)featureCls;

            addFeild.AddField(field);

            //加载到内存,上下文中
            IFields    fields     = featureCls.Fields;
            IFieldEdit fieldsEdit = fields as IFieldEdit;

            featureCls.AddField(field);
            //fieldsEdit.AddField(field);
        }
예제 #14
0
        /// <summary>
        /// 检查格网字段是否存在,不存在就添加格网字段
        /// </summary>
        /// <param name="pFeatureLayer">待检查的图层</param>
        /// <param name="strField">格网字段的NameField</param>
        public void CheckGridField(IFeatureLayer pFeatureLayer, string strField)
        {
            IClass pTable = pFeatureLayer.FeatureClass as IClass;

            try
            {
                if (pTable.Fields.FindField(strField) == -1)
                {
                    IField     pField     = new FieldClass();
                    IFieldEdit pFieldEdit = pField as IFieldEdit;
                    pFieldEdit.Name_2 = strField;
                    pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
                    pTable.AddField(pField);
                }
            }
            catch
            {
                MessageBox.Show("添加字段有误,数据被占用!");
                return;
            }
        }
예제 #15
0
        /// <summary>
        /// 向已有表格添加新字段,若字段存在则不添加,并返回字段索引
        /// <para>注意:若数据源为shp,字段名长度不能超过10,否则报错</para>
        /// <para>注意:向已有表格添加字段使用IClass.AddFiled,而在创建表格时设置字段使用IFieldsEdit.AddField</para>
        /// </summary>
        /// <param name="table">操作的表格</param>
        /// <param name="name">字段名</param>
        /// <param name="aliasName">字段别名</param>
        /// <param name="fieldType">字段类型</param>
        /// <param name="length">字段长度,若为0则不设置长度(使用默认长度)</param>
        /// <param name="precision">字段精度,表示数值类型字段除小数点外的总长度,即整数位数加上小数位数</param>
        /// <param name="scale">小数位数</param>
        /// <returns>添加的字段的索引</returns>
        public static int AddField(this ITable table, string name, string aliasName, esriFieldType fieldType, int length = 0, int precision = 0, int scale = 0)
        {
            //若存在,则不需添加
            int index;

            if ((index = table.Fields.FindField(name)) > -1)
            {
                return(index);
            }

            IField field = new FieldClass();

            try
            {
                IFieldEdit fieldEdit = field as IFieldEdit;
                fieldEdit.Name_2      = name;
                fieldEdit.AliasName_2 = aliasName;
                fieldEdit.Type_2      = fieldType;
                if (length > 0)
                {
                    fieldEdit.Length_2 = length;
                }
                if (precision > 0)
                {
                    fieldEdit.Precision_2 = precision;
                }
                if (scale > 0)
                {
                    fieldEdit.Scale_2 = scale;
                }

                IClass cls = table as IClass;
                cls.AddField(fieldEdit); //此处使用IClass.AddFiled方法,不使用IFieldsEdit.AddField方法
                return(cls.FindField(name));
            }
            catch (Exception ex) { throw new Exception($"添加字段{name}({aliasName})失败:{ex.Message}", ex); }
        }
예제 #16
0
        private void button1_Click(object sender, EventArgs e)
        {
            //得到dem、分成多个区域



            //获取等高线
            ILayer tLayer = this.axMapControl1.get_Layer(0);

            IRasterLayer tRasterLayer = (IRasterLayer)tLayer;

            IFeatureClass tFeatureClass = null;

            IGeoDataset tGeodataset = null;

            //使用接口参数(Raster,等高线间距,基值)
            ISurfaceOp tSurfaceop = new RasterSurfaceOpClass();

            object obj = 0;

            tGeodataset = tSurfaceop.Contour((IGeoDataset)tRasterLayer.Raster, 5, ref obj);  //等高线间距为10米

            IFeatureLayer tFeatureLayer = new FeatureLayerClass();

            //判断是否生成等高线
            if (tGeodataset != null)
            {
                tFeatureClass = (IFeatureClass)tGeodataset;

                if (tFeatureClass != null)
                {
                    tFeatureLayer.FeatureClass = tFeatureClass;

                    //this.axMapControl1.AddLayer((ILayer)tFeatureLayer);

                    //this.axMapControl1.Refresh();
                }
            }

            tFeatureLayer = deleteLine(tFeatureLayer);

            this.axMapControl1.AddLayer((ILayer)tFeatureLayer);

            this.axMapControl1.Refresh();

            /*选取特定高程的等高线*/

            //得到Feature的指针
            IQueryFilter queryFilter = new SpatialFilterClass();

            int maxContour = getMax(tFeatureLayer);

            int queryContour = maxContour - 10; //选择具体某条等高线

            queryFilter.WhereClause = "Contour = " + queryContour;

            IFeatureCursor featureCursor = tFeatureClass.Search(queryFilter, false);
            IFeature       feature       = featureCursor.NextFeature();

            //获取表的长度
            //int attributeTableLength = tFeatureClass.Fields.FindField("id");
            //string lenStr = attributeTableLength.ToString();
            //MessageBox.Show(lenStr);
            ////
            //IGeometry geometry;
            //IPolyline polyline;
            /* 筛选符合要求的等高线*/
            //while (feature!=null)
            //{
            //    IFields ptFields  =  feature.Fields;
            //    geometry =  feature.Shape;
            //    polyline =  (IPolyline)geometry;
            //    IField field = ptFields.get_Field(0);
            //    feature.get_Value();
            //    feature = featureCursor.NextFeature(); //指针移动到下一行。
            //}



            //释放游标
            System.Runtime.InteropServices.Marshal.ReleaseComObject(featureCursor);


            //获取选中的等高线
            IGeometry geometry = feature.Shape;
            IPolyline polyline = (IPolyline)geometry;

            //定义列表存储构成等高线的点的坐标、高程
            List <IPoint> contourPoint = new List <IPoint>();

            contourPoint = getPointByContourLine(polyline);

            /*将线转成面,并获取面的面积*/

            ////初始化Geoprocessor工具
            //Geoprocessor processor = new Geoprocessor();

            //FeatureToPolygon fPolygon = new FeatureToPolygon();

            //fPolygon.in_features = feature;

            //fPolygon.out_feature_class = "D:\\testData\\conPolygon.shp";

            //processor.Execute(fPolygon,null);


            //构造面,并将构成等高线的点赋予面

            //IPoint pPoint = new PointClass();

            //IPointCollection pointCollection = new PolygonClass();

            //object missing = Type.Missing;

            //double x, y;

            //for (int i = 0; i < contourPoint.Count; i++)
            //{

            //    x = contourPoint[i].X;

            //    y = contourPoint[i].Y;

            //    pPoint = new PointClass();

            //    pPoint.PutCoords(x, y);

            //    pointCollection.AddPoint(pPoint, ref missing, ref missing);

            //}

            //IPolygon pPolygon = new PolygonClass();

            ////生成面
            //pPolygon = (IPolygon)pointCollection;



            //获取指定数据库的要素类

            string path = "D:\\testPolygon";

            IFeatureClass featureclass = getFeatureClass(path);

            IFeatureLayer polyFeatureLayer = new FeatureLayerClass();

            IFeatureClass polyFeatclas = IfeatureBuffer(contourPoint, featureclass, maxContour.ToString());


            /*给由等高线生成的面添加新字段Contour(表示等高线高程值是多少)*/
            //定义新字段
            IField pField = new FieldClass();

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

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

            //获取属性表
            IClass pTable = polyFeatclas as IClass;

            pTable.AddField(pFieldEdit);

            IFeature pFea = polyFeatclas.GetFeature(0);

            pFea.set_Value(pFea.Fields.FindField("Contour"), maxContour.ToString());

            //保存
            pFea.Store();

            polyFeatureLayer.FeatureClass = polyFeatclas;

            //将生成的面加入到当前地图控件中
            this.axMapControl1.AddLayer(polyFeatureLayer);

            this.axMapControl1.Refresh();

            IFeature polyFeature, lineFeature;

            polyFeature = polyFeatclas.GetFeature(0);

            lineFeature = feature;

            double judResult = calculate(polyFeature, lineFeature);

            double radius = fitting(contourPoint);

            RadiTBox.Text = radius.ToString();

            MessageBox.Show(judResult.ToString(), "面积/周长");
        }
        protected static int AddNewField(IClass fclass, string Name)
        {
            IField nw = new FieldClass();
            IFieldEdit new_field = (IFieldEdit)nw;

            new_field.Name_2 = Name;
            if (Name.IndexOf("UNIT", 0, StringComparison.CurrentCultureIgnoreCase) > -1)
            {
                new_field.Type_2 = esriFieldType.esriFieldTypeString;
                new_field.Length_2 = 20;
            }
            else
            {
                new_field.Type_2 = esriFieldType.esriFieldTypeDouble;
                new_field.DefaultValue_2 = double.NaN;
            }
            new_field.IsNullable_2 = true;
            fclass.AddField(new_field);

            return fclass.FindField(Name);
        }
예제 #18
0
        private void btnOK_Click(object sender, EventArgs e)
        {
            string strFieldName      = txtFieldName.Text;
            string strFieldNameAlias = txtFieldAliasName.Text;
            string strFieldType      = cmbFieldType.Text;

            try
            {
                IFeatureLayer editAttributeLayer = _FeatureLayer;
                //获取FeatureLayer
                IFeatureLayer pFeatureLayer = editAttributeLayer;

                //从FeatureLayer获取工作空间
                IDataset   pDataSet   = pFeatureLayer.FeatureClass as IDataset;
                IWorkspace pWorkSpace = pDataSet.Workspace;
                //设置字段属性
                IField     pNewField  = new FieldClass();
                IClass     pClass     = pFeatureLayer as IClass;
                IFieldEdit pFieldEdit = pNewField as IFieldEdit;
                pFieldEdit.AliasName_2 = strFieldNameAlias;
                pFieldEdit.Name_2      = strFieldName;
                switch (strFieldType)
                {
                case "长整型":
                {
                    pFieldEdit.Type_2      = esriFieldType.esriFieldTypeInteger;
                    pFieldEdit.Precision_2 = int.Parse(txtPrecision.Text);
                    break;
                }

                case "短整型":
                {
                    pFieldEdit.Type_2      = esriFieldType.esriFieldTypeSmallInteger;
                    pFieldEdit.Precision_2 = int.Parse(txtPrecision.Text);
                    break;
                }

                case "浮点型":
                {
                    pFieldEdit.Type_2      = esriFieldType.esriFieldTypeSingle;
                    pFieldEdit.Precision_2 = int.Parse(txtPrecision.Text);
                    pFieldEdit.Scale_2     = int.Parse(txtScale.Text);
                    break;
                }

                case "双精度":
                {
                    pFieldEdit.Type_2      = esriFieldType.esriFieldTypeDouble;
                    pFieldEdit.Precision_2 = int.Parse(txtPrecision.Text);
                    pFieldEdit.Scale_2     = int.Parse(txtScale.Text);
                    break;
                }

                case "文本型":
                {
                    pFieldEdit.Type_2   = esriFieldType.esriFieldTypeString;
                    pFieldEdit.Length_2 = int.Parse(txtPrecision.Text);
                    break;
                }

                default:    //日期型0
                {
                    pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDate;
                    break;
                }
                }
                //添加字段
                try
                {
                    int theField = pFeatureLayer.FeatureClass.Fields.FindField(strFieldName);
                    if (theField == -1)
                    {
                        pClass.AddField(pFieldEdit);
                        //pFeatureLayer.FeatureClass.AddField(pFieldEdit);
                        MessageBox.Show("字段添加成功!");
                    }
                    else
                    {
                        MessageBox.Show("字段已经存在!");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Field " + pFieldEdit.Name + " was not added due to an error (" + ex.Message + " )");
                }
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            this.Close();
            _dgv.Update();
            RefreshTable refresh = new RefreshTable();

            refresh.Refresh(_dgv, _FeatureLayer);
        }