Create or update a table out of selected geodatabase items?

09-17-2019 08:05 AM
New Contributor


I'm trying to create or update a table in a gdb by enabling user to select one or multiple items (eg, feature class, table, ..) from a file geodatabase when a dialog box opens (button addin) in ArcGIS Pro. Therefore, the output table should show feature class or table names, dates, status, username, ...

I'm doing this in C# and here's what I have created so far but it throws an error:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ArcGIS.Core.CIM;
using ArcGIS.Core.Data;
using ArcGIS.Core.Geometry;
using ArcGIS.Desktop.Catalog;
using ArcGIS.Desktop.Core;
using ArcGIS.Desktop.Editing;
using ArcGIS.Desktop.Extensions;
using ArcGIS.Desktop.Framework;
using ArcGIS.Desktop.Framework.Contracts;
using ArcGIS.Desktop.Framework.Dialogs;
using ArcGIS.Desktop.Framework.Threading.Tasks;
using ArcGIS.Desktop.Mapping;
namespace Geodatabase_FC2Table
    internal class Btn_OpenGDB : Button
        protected async override void OnClick()
            OpenItemDialog CatalogOpenDialog = new OpenItemDialog()
                Title = "Select Geodatabases",
                MultiSelect = true,
                Filter = ItemFilters.geodatabaseItems_all

            GeoDatabaseReader geoDbReader = new GeoDatabaseReader();
            List<LayerObjectInfo> resultArr = new List<LayerObjectInfo>();
            if (CatalogOpenDialog.ShowDialog() == true)
                foreach (Item item in CatalogOpenDialog.Items)
                    List<LayerObjectInfo> aGdbResultArr = await geoDbReader.ReadGeoDataBase(item.Name);
    public class GeoDatabaseReader
        public async Task<List<LayerObjectInfo>> ReadGeoDataBase(string GeoDataBasePath)
            List<LayerObjectInfo> result = new List<LayerObjectInfo>();
            await QueuedTask.Run(() =>
                var path = new Uri(GeoDataBasePath);
                var gdb = new Geodatabase(new FileGeodatabaseConnectionPath(path));
                IReadOnlyList<FeatureClassDefinition> definitions = gdb.GetDefinitions<FeatureClassDefinition>();

                foreach (var fdsDef in definitions)
                    LayerObjectInfo layerObjectInfo = new LayerObjectInfo();
                    TableDefinition ATableDef = fdsDef as TableDefinition;
                    layerObjectInfo.LayerName = (string.IsNullOrEmpty(ATableDef.GetAliasName())) ? ATableDef.GetName() : ATableDef.GetAliasName();
                    DateTime today = DateTime.Today;
                    layerObjectInfo.Date = today;
                    layerObjectInfo.UserName = Environment.UserName;
                    layerObjectInfo.Status = "Complete";
            return result;
    public class LayerObjectInfo
        public string LayerName { get; set; }
        public string Date { get; set; }
        public string UserName { get; set; }
        public string Status { get; set; }

Thank you.

Tags (2)
0 Kudos
3 Replies
Esri Regular Contributor


Do you what error is being returned and what line is failing?


0 Kudos
New Contributor

Hi Rich,

when I run the code I get this error:

0 Kudos
by Anonymous User
Not applicable

Hi Steve,

Next step is , add the breakpoint at that line .

And debug it.

When Breakpoint hit.

Open the immediate windows in visual studio Ctrl+Alt+I

Check your geodatabasepath variable in it whether it is valid path or not.

0 Kudos