public static class RowChangedEvent
Public MustInherit NotInheritable Class RowChangedEvent
public static class RowChangedEvent
Public MustInherit NotInheritable Class RowChangedEvent
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 subRowEvent() { 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) { // 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 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 { // update Notes table with information about the new feature var geoDatabase = new Geodatabase(new FileGeodatabaseConnectionPath(new Uri(Project.Current.DefaultGeodatabasePath))); var table = geoDatabase.OpenDataset<Table>("Notes"); var tableDefinition = table.GetDefinition(); using (var rowbuff = table.CreateRowBuffer()) { // add a description rowbuff["Description"] = "OID: " + args.Row.GetObjectID().ToString() + " " + DateTime.Now.ToShortTimeString(); table.CreateRow(rowbuff); } } catch (Exception e) { MessageBox.Show($@"Error in OnRowCreated for OID: {args.Row.GetObjectID()} : {e.ToString()}"); } } private Guid _currentRowChangedGuid = Guid.Empty; protected void OnRowChanged(RowChangedEventArgs args) { // RowEvent callbacks are always called on the QueuedTask so there is no need // to wrap your code within a QueuedTask.Run lambda. var row = args.Row; // check for re-entry (only if row.Store is called) if (_currentRowChangedGuid == args.Guid) return; var fldIdx = row.FindField("POLICE_DISTRICT"); if (fldIdx != -1) { //Validate any change to �police district� // cancel the edit if validation on the field fails if (row.HasValueChanged(fldIdx)) { if (FailsValidation(row["POLICE_DISTRICT"].ToString())) { //Cancel edits with invalid �police district� values args.CancelEdit($"Police district {row["POLICE_DISTRICT"]} is invalid"); } } // update the description field row["Description"] = "Row Changed"; // this update with cause another OnRowChanged event to occur // keep track of the row guid to avoid recursion _currentRowChangedGuid = args.Guid; row.Store(); _currentRowChangedGuid = Guid.Empty; } } protected void OnRowDeleted(RowChangedEventArgs args) { var row = args.Row; // cancel the delete if the feature is in Police District 5 var fldIdx = row.FindField("POLICE_DISTRICT"); if (fldIdx != -1) { var value = row[fldIdx].ToString(); if (value == "5") args.CancelEdit(); } }
System.Object
ArcGIS.Desktop.Editing.Events.RowChangedEvent
Target Platforms: Windows 10, Windows 8.1, Windows 7