ArcGIS Pro C#二次开发-删除字段
2021-03-14 18:28
标签:make add relay else write 二次开发 message ace over ArcGIS Pro C#二次开发-删除字段 标签:make add relay else write 二次开发 message ace over 原文地址:https://www.cnblogs.com/gisoracle/p/12464700.htmlusing 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 Taskstring> 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 Taskbool> 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;
}
}
}
}