ArcObjects Library Reference  

PurgeRuleForm

About the Updating the purge rule on a real-time temporal layer Sample

[C#]

PurgeRuleForm.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.TrackingAnalyst;
using ESRI.ArcGIS.GeoDatabaseExtensions;

namespace TAPurgeRuleCommand
{
	public partial class PurgeRuleForm : Form
	{
		private IEnumLayer m_eTrackingLayers = null;

		public PurgeRuleForm()
		{
			InitializeComponent();
		}

		//The collection of temporal layers in the map/globe
		public IEnumLayer TrackingLayers
		{
			set
			{
				m_eTrackingLayers = value;
			}
		}

		//Initialize all the dialog controls
		public void PopulateDialog()
		{
			cbTrackingLayers.SelectedIndex = -1;
			PopulateTrackingLayerComboBox();
			LoadDialogFromFeatureClassSettings(null);
		}

		//Populate the tracking layer combo box with the names 
		//of all the temporal layers in the map
		private void PopulateTrackingLayerComboBox()
		{
			ILayer lyr = null;
			m_eTrackingLayers.Reset();

			cbTrackingLayers.Items.Clear();
			while ((lyr = m_eTrackingLayers.Next()) != null)
			{
				cbTrackingLayers.Items.Add(lyr.Name);
			}
		}

		//Get the ILayer using the name selected in the tracking layer combo box
		private ILayer GetSelectedLayer()
		{
			string sLayerName = Convert.ToString(cbTrackingLayers.SelectedItem);

			ILayer lyr = null;
			m_eTrackingLayers.Reset();

			while ((lyr = m_eTrackingLayers.Next()) != null)
			{
				if (lyr.Name == sLayerName)
				{
					return lyr;
				}
			}

			return null;
		}

		//Repopulate the dialog controls when a different layer is selected
		private void cbTrackingLayers_SelectionChangeCommitted(object sender, EventArgs e)
		{
			ILayer lyr = GetSelectedLayer();

			if (lyr != null)
			{
				ITemporalFeatureClass temporalFC = ((IFeatureLayer)lyr).FeatureClass as ITemporalFeatureClass;
				LoadDialogFromFeatureClassSettings(temporalFC);
			}

		}

		//Set the dialog controls according to the settings of the specified temporal feature class
		private void LoadDialogFromFeatureClassSettings(ITemporalFeatureClass temporalFC)
		{
			//If no feature class is specified clear all the controls
			if (temporalFC == null)
			{
				btnApply.Enabled = false;
				checkAutoPurge.Checked = false;
				cbPurgeRule.SelectedIndex = 0;
				txtThreshold.Text = "";
				txtPurgePercent.Text = "";
				return;
			}

			btnApply.Enabled = true;
			checkAutoPurge.Checked = temporalFC.AutoPurge;
			cbPurgeRule.SelectedIndex = (int)temporalFC.PurgeRule;
			txtThreshold.Text = Convert.ToString(temporalFC.Threshold);
			txtPurgePercent.Text = Convert.ToString(temporalFC.PurgePercentage);
		}

		//Apply the new settings to the temporal feature class
		private void btnApply_Click(object sender, EventArgs e)
		{
			try
			{
				ILayer lyr = GetSelectedLayer();

				if (lyr != null)
				{
					ITemporalFeatureClass temporalFC = (ITemporalFeatureClass)((IFeatureLayer)lyr).FeatureClass;

          				if (temporalFC != null)
          				{
            					temporalFC.AutoPurge = checkAutoPurge.Checked;

						//only set the other properties if Auto Purge is true
						if (checkAutoPurge.Checked)
						{
							temporalFC.PurgeRule = (enumPurgeRule)cbPurgeRule.SelectedIndex;
							temporalFC.Threshold = Convert.ToInt32(txtThreshold.Text);
							temporalFC.PurgePercentage = Convert.ToDouble(txtPurgePercent.Text);
						}
					}
				}

			}
			catch (Exception ex)
			{
				MessageBox.Show(ex.Message, "Error");
			}
		}

		//Set the appropriate text boxes enabled depending on the purge rule selected
		private void cbPurgeRule_SelectedIndexChanged(object sender, EventArgs e)
		{
			switch (cbPurgeRule.SelectedIndex)
			{
				case 0:
				default:
					txtThreshold.Enabled = true;
					txtPurgePercent.Enabled = true;
					break;
				case 1:
					txtThreshold.Enabled = true;
					txtPurgePercent.Enabled = false;
					break;
			}
		}

		private void btnCancel_Click(object sender, EventArgs e)
		{
			this.Hide();
		}

		//Don't dispose the dialog when it's closed.  Just hide it so that it can be reopened.
		private void PurgeRuleForm_FormClosing(object sender, FormClosingEventArgs e)
		{
			this.Hide();
			e.Cancel = true;
		}
	}
}
[Visual Basic .NET]

PurgeRuleForm.vb

Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports ESRI.ArcGIS.Carto
Imports ESRI.ArcGIS.TrackingAnalyst
Imports ESRI.ArcGIS.GeoDatabaseExtensions

Namespace TAPurgeRuleCommand
	Public Partial Class PurgeRuleForm : Inherits Form
		Private m_eTrackingLayers As IEnumLayer = Nothing

		Public Sub New()
			InitializeComponent()
		End Sub

		'The collection of temporal layers in the map/globe
		Public WriteOnly Property TrackingLayers() As IEnumLayer
			Set
				m_eTrackingLayers = Value
			End Set
		End Property

		'Initialize all the dialog controls
		Public Sub PopulateDialog()
			cbTrackingLayers.SelectedIndex = -1
			PopulateTrackingLayerComboBox()
			LoadDialogFromFeatureClassSettings(Nothing)
		End Sub

		'Populate the tracking layer combo box with the names 
		'of all the temporal layers in the map
		Private Sub PopulateTrackingLayerComboBox()
			Dim lyr As ILayer = Nothing
			m_eTrackingLayers.Reset()

            cbTrackingLayers.Items.Clear()
            lyr = m_eTrackingLayers.Next()
            Do While Not lyr Is Nothing
                cbTrackingLayers.Items.Add(lyr.Name)
                lyr = m_eTrackingLayers.Next()
            Loop
		End Sub

		'Get the ILayer using the name selected in the tracking layer combo box
		Private Function GetSelectedLayer() As ILayer
			Dim sLayerName As String = Convert.ToString(cbTrackingLayers.SelectedItem)

			Dim lyr As ILayer = Nothing
			m_eTrackingLayers.Reset()

            lyr = m_eTrackingLayers.Next()
            Do While Not lyr Is Nothing
                If lyr.Name = sLayerName Then
                    Return lyr
                End If
                lyr = m_eTrackingLayers.Next()
            Loop

			Return Nothing
		End Function

		'Repopulate the dialog controls when a different layer is selected
		Private Sub cbTrackingLayers_SelectionChangeCommitted(ByVal sender As Object, ByVal e As EventArgs) Handles cbTrackingLayers.SelectionChangeCommitted
			Dim lyr As ILayer = GetSelectedLayer()

			If Not lyr Is Nothing Then
				Dim temporalFC As ITemporalFeatureClass = TryCast((CType(lyr, IFeatureLayer)).FeatureClass, ITemporalFeatureClass)
				LoadDialogFromFeatureClassSettings(temporalFC)
			End If

		End Sub

        'Set the dialog controls according to the settings of the specified temporal feature class
		Private Sub LoadDialogFromFeatureClassSettings(ByVal temporalFC As ITemporalFeatureClass)
			'If no feature class is specified clear all the controls
			If temporalFC Is Nothing Then
				btnApply.Enabled = False
				checkAutoPurge.Checked = False
				cbPurgeRule.SelectedIndex = 0
				txtThreshold.Text = ""
				txtPurgePercent.Text = ""
				Return
			End If

			btnApply.Enabled = True
			checkAutoPurge.Checked = temporalFC.AutoPurge
			cbPurgeRule.SelectedIndex = CInt(temporalFC.PurgeRule)
			txtThreshold.Text = Convert.ToString(temporalFC.Threshold)
			txtPurgePercent.Text = Convert.ToString(temporalFC.PurgePercentage)
		End Sub

		'Apply the new settings to the temporal feature class
		Private Sub btnApply_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnApply.Click
			Try
				Dim lyr As ILayer = GetSelectedLayer()

				If Not lyr Is Nothing Then
					Dim temporalFC As ITemporalFeatureClass = CType((CType(lyr, IFeatureLayer)).FeatureClass, ITemporalFeatureClass)

					temporalFC.AutoPurge = checkAutoPurge.Checked

					'only set the other properties if Auto Purge is true
					If checkAutoPurge.Checked Then
						temporalFC.PurgeRule = CType(cbPurgeRule.SelectedIndex, enumPurgeRule)
						temporalFC.Threshold = Convert.ToInt32(txtThreshold.Text)
						temporalFC.PurgePercentage = Convert.ToDouble(txtPurgePercent.Text)
					End If
				End If

			Catch ex As Exception
				MessageBox.Show(ex.Message, "Error")
			End Try
		End Sub

		'Set the appropriate text boxes enabled depending on the purge rule selected
		Private Sub cbPurgeRule_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles cbPurgeRule.SelectedIndexChanged
			Select Case cbPurgeRule.SelectedIndex
                Case 1
                    txtThreshold.Enabled = True
                    txtPurgePercent.Enabled = False
                Case Else
                    txtThreshold.Enabled = True
                    txtPurgePercent.Enabled = True
            End Select
		End Sub

		Private Sub btnCancel_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnCancel.Click
			Me.Hide()
		End Sub

		'Don't dispose the dialog when it's closed.  Just hide it so that it can be reopened.
		Private Sub PurgeRuleForm_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles MyBase.FormClosing
			Me.Hide()
			e.Cancel = True
		End Sub
	End Class
End Namespace