• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

gisoracle

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

ArcGIS Pro C#二次开发-删除字段

using System;
using System.Collections.Generic;
using System.Linq;
//using System.Windows;
//using System.Windows.Forms;


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading;

using System.Threading.Tasks;

using ArcGIS.Desktop.Core.Geoprocessing;

using ArcGIS.Desktop.Framework;

using ArcGIS.Desktop.Framework.Contracts;

using ArcGIS.Desktop.Framework.Dialogs;

using ArcGIS.Desktop.Mapping;

namespace ProAppModule1
{
    internal class Button1 : ArcGIS.Desktop.Framework.Contracts.Button
    {
        string delFieldName = "AddedField";//需要删除的字段
        protected override async void OnClick()

        {

            try

            {

                BasicFeatureLayer layer = null;

                await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>

                {

                    //find selected layer

                    if (MapView.Active.GetSelectedLayers().Count == 0)

                    {

                        MessageBox.Show("Select a feature class from the Content 'Table of Content' first.");

                        return;

                    }

                    layer = MapView.Active.GetSelectedLayers()[0] as BasicFeatureLayer;



                });

                if (layer == null)

                    MessageBox.Show("Unable to find a feature class at the first layer of the active map");

                else

                {

                    var dataSource = await GetDataSource(layer);

                    MessageBox.Show($@"{dataSource} was found .... deleting the newly added field");

                    await

                        ExecuteDeleteFieldTool(layer, delFieldName);

                }

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.ToString());

            }

        }



        private async Task<string> GetDataSource(BasicFeatureLayer theLayer)

        {

            try

            {

                return await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>

                {

                    var inTable = theLayer.Name;

                    var table = theLayer.GetTable();

                    var dataStore = table.GetDatastore();

                    var workspaceNameDef = dataStore.GetConnectionString();

                    var workspaceName = workspaceNameDef.Split('=')[1];



                    var fullSpec = System.IO.Path.Combine(workspaceName, inTable);

                    return fullSpec;

                });

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.ToString());

                return string.Empty;

            }

        }



        private async Task<bool> ExecuteDeleteFieldTool(BasicFeatureLayer theLayer, string fieldName)

        {

            try

            {

                return await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>

                {

                    var inTable = theLayer.Name;

                    var table = theLayer.GetTable();

                    var dataStore = table.GetDatastore();

                    var workspaceNameDef = dataStore.GetConnectionString();

                    var workspaceName = workspaceNameDef.Split('=')[1];



                    var fullSpec = System.IO.Path.Combine(workspaceName, inTable);

                    System.Diagnostics.Debug.WriteLine($@"Delete {fieldName} from {fullSpec}");



                    var parameters = Geoprocessing.MakeValueArray(fullSpec, fieldName);

                    var cts = new CancellationTokenSource();

                    var results = Geoprocessing.ExecuteToolAsync("management.DeleteField", parameters, null, cts.Token,

                        (eventName, o) =>

                        {

                            System.Diagnostics.Debug.WriteLine($@"GP event: {eventName}");

                            if (eventName == "OnMessage")

                            {



                                System.Diagnostics.Debug.WriteLine($@"Msg: {o}");

                            }

                        });

                    return true;



                });

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.ToString());

                return false;

            }

        }



    }
}

 

posted on 2020-03-11 19:06  gisai  阅读(661)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3