public static class RowCreatedEvent
Public MustInherit NotInheritable Class RowCreatedEvent
public static class RowCreatedEvent
Public MustInherit NotInheritable Class RowCreatedEvent
If you need to edit additional tables within the RowEvent you MUST use the ArcGIS.Core.Data API to edit the tables directly. Do NOT use a new edit operation to create or modify features or rows in your RowEvent callback.
protected void SubscribeRowEvent() { QueuedTask.Run(() => { //Listen for row events on a layer var featLayer = MapView.Active.GetSelectedLayers().First() as FeatureLayer; var layerTable = featLayer.GetTable(); //subscribe to row events var rowCreateToken = RowCreatedEvent.Subscribe(OnRowCreated, layerTable); var rowChangeToken = RowChangedEvent.Subscribe(OnRowChanged, layerTable); var rowDeleteToken = RowDeletedEvent.Subscribe(OnRowDeleted, layerTable); }); } protected void OnRowCreated(RowChangedEventArgs args) { } protected void OnRowChanged(RowChangedEventArgs args) { } protected void OnRowDeleted(RowChangedEventArgs args) { }
// Use the EditOperation in the RowChangedEventArgs to append actions to be executed. // Your actions will become part of the operation and combined into one item on the undo stack private void HookRowCreatedEvent() { // subscribe to the RowCreatedEvent Table table = MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().FirstOrDefault().GetTable(); RowCreatedEvent.Subscribe(MyRowCreatedEvent, table); } private void MyRowCreatedEvent(RowChangedEventArgs args) { // RowEvent callbacks are always called on the QueuedTask so there is no need // to wrap your code within a QueuedTask.Run lambda. // get the edit operation var parentEditOp = args.Operation; // set up some attributes var attribs = new Dictionary<string, object> { }; attribs.Add("Layer", "Parcels"); attribs.Add("Description", "OID: " + args.Row.GetObjectID().ToString() + " " + DateTime.Now.ToShortTimeString()); //create a record in an audit table var sTable = MapView.Active.Map.FindStandaloneTables("EditHistory").First(); var table = sTable.GetTable(); parentEditOp.Create(table, attribs); }
// Use the EditOperation in the RowChangedEventArgs to append actions to be executed. // Your actions will become part of the operation and combined into one item on the undo stack private void HookCreatedEvent() { // subscribe to the RowCreatedEvent Table table = MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().FirstOrDefault().GetTable(); RowCreatedEvent.Subscribe(OnRowCreatedEvent, table); } private void OnRowCreatedEvent(RowChangedEventArgs args) { // RowEvent callbacks are always called on the QueuedTask so there is no need // to wrap your code within a QueuedTask.Run lambda. // update a separate table not in the map when a row is created // You MUST use the ArcGIS.Core.Data API to edit the table. Do NOT // use a new edit operation in the RowEvent callbacks try { // get the edit operation var parentEditOp = args.Operation; // set up some attributes var attribs = new Dictionary<string, object> { }; attribs.Add("Description", "OID: " + args.Row.GetObjectID().ToString() + " " + DateTime.Now.ToShortTimeString()); // update Notes table with information about the new feature using (var geoDatabase = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri(Project.Current.DefaultGeodatabasePath)))) { using (var table = geoDatabase.OpenDataset<Table>("Notes")) { parentEditOp.Create(table, attribs); } } } catch (Exception e) { MessageBox.Show($@"Error in OnRowCreated for OID: {args.Row.GetObjectID()} : {e.ToString()}"); } }
System.Object
ArcGIS.Desktop.Editing.Events.RowCreatedEvent
Target Platforms: Windows 11, Windows 10