Common_CustomEditorTask_VBNet\CustomEditorTask_VBNet\PolygonToLineLayerEditorPanel.vb
' Copyright 2010 ESRI ' ' All rights reserved under the copyright laws of the United States ' and applicable international laws, treaties, and conventions. ' ' You may freely redistribute and use this sample code, with or ' without modification, provided you include the original copyright ' notice and use restrictions. ' ' See the use restrictions. ' Imports Microsoft.VisualBasic Imports System Namespace CustomEditorTask_VBNet Friend Class PolygonToLineLayerEditorPanel Inherits ESRI.ArcGIS.ADF.ArcGISServer.Editor.EditorPanel #Region "Instance Variable Declarations" ' Reference to the drop down list in the custom panel Private m_layersDropDownList As System.Web.UI.WebControls.DropDownList #End Region #Region "Constructor" Public Sub New(ByVal title As String, ByVal editorTask As ESRI.ArcGIS.ADF.ArcGISServer.Editor.EditorTask, ByVal ID As String) MyBase.New(title, editorTask, ID) End Sub #End Region #Region "WebControl Life Cycle Event Overrides" ' Instantiates the custom panel's child controls Protected Overrides Sub CreateChildControls() MyBase.CreateChildControls() ' Label for the target layer drop-down list Dim targetLayerLabel As System.Web.UI.WebControls.Label = New System.Web.UI.WebControls.Label() targetLayerLabel.Text = "Target layer: " Controls.Add(targetLayerLabel) ' Target layer drop-down list m_layersDropDownList = New System.Web.UI.WebControls.DropDownList() m_layersDropDownList.ID = "targetLayers" Controls.Add(m_layersDropDownList) ' Call to add editable polyline layers to the drop down list AddPolylineLayers() End Sub Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) ' When item selected (changed) in the drop down list, trigger a callback to this control. ' Process in GetCallbackResult() Dim jsOnChange As String = String.Format("javascript:var context;var argument='EventArg=targetChanged&layer=' " & "+ document.getElementById('{0}').value; eval(""{1}"");", m_layersDropDownList.ClientID, CallbackFunctionString) m_layersDropDownList.Attributes.Add("onchange", jsOnChange) MyBase.Render(writer) End Sub #End Region #Region "Callback Handler" Public Overrides Function GetCallbackResult() As String ' Parse callback arguments using the CallbackUtility included with Web ADF. ' CallbackEventArgument is a string member variable inherited from ' ESRI.ArcGIS.ADF.Web.UI.WebControls.CompositeControl. Upon a callback, it ' contains the string argument passed to RaiseCallbackEvent(). Dim nameValueCollection As System.Collections.Specialized.NameValueCollection = ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackUtility.ParseStringIntoNameValueCollection(Me.CallbackEventArgument) Dim polylineLayerID As Integer If Integer.TryParse(nameValueCollection("layer"), polylineLayerID) Then ' Set the property on the custom Editor that indicates the target layer for Polygon to Polyline Dim customEditor As CustomEditor = CType(ParentEditor, CustomEditor) customEditor.PolylineLayerID = polylineLayerID End If Return Nothing End Function #End Region #Region "Instance Properties" ' The layer ID for the selected layer in the drop down list Public ReadOnly Property TargetLayerID() As Integer Get Return Integer.Parse(m_layersDropDownList.SelectedValue) End Get End Property #End Region #Region "Instance Methods" ' Add editable polyline layers to drop down list Private Sub AddPolylineLayers() If Page.Application Is Nothing Then Return End If ' Retrieve polyline layer names and ids from session Dim polygonLayersNameValueCollection As System.Collections.Specialized.NameValueCollection = TryCast(Page.Session("polygonLayers"), System.Collections.Specialized.NameValueCollection) If polygonLayersNameValueCollection Is Nothing Then polygonLayersNameValueCollection = New System.Collections.Specialized.NameValueCollection() ' Iterate through the EditorTask's string list of editable layer IDs For Each stringLayerID As String In Task.EditableLayers Dim layerID As Integer = Integer.Parse(stringLayerID) ' Iterate through the MapLayerInfos in the editor's underlying map resource For Each mapLayerInfo As ESRI.ArcGIS.ADF.ArcGISServer.MapLayerInfo In ParentEditor.MapFunctionality.MapResource.MapServerInfo.MapLayerInfos ' Check whether the current MapLayerInfo corresponds to that referred by the current layer ID If (mapLayerInfo.IsFeatureLayer) AndAlso (mapLayerInfo.LayerID = layerID) Then ' If the MapLayerInfo contains a polyline geometry definition add it to the collection of ' polyline layers For Each agsField As ESRI.ArcGIS.ADF.ArcGISServer.Field In mapLayerInfo.Fields.FieldArray If Not agsField.GeometryDef Is Nothing AndAlso agsField.GeometryDef.GeometryType = ESRI.ArcGIS.ADF.ArcGISServer.esriGeometryType.esriGeometryPolyline Then ' If editable layer is of type polyline, add to the collection polygonLayersNameValueCollection.Add(stringLayerID, mapLayerInfo.Name) Exit For End If Next agsField Exit For End If Next mapLayerInfo Next stringLayerID Page.Session("polygonLayers") = polygonLayersNameValueCollection End If ' Add list items to drop down list For Each layerID As String In polygonLayersNameValueCollection.Keys m_layersDropDownList.Items.Add(New System.Web.UI.WebControls.ListItem(polygonLayersNameValueCollection(layerID), layerID)) Next layerID ' Set custom Editor PolylineLayerID property Dim customEditor As CustomEditor = CType(ParentEditor, CustomEditor) If customEditor.PolylineLayerID = -1 AndAlso polygonLayersNameValueCollection.Count > 0 Then customEditor.PolylineLayerID = Integer.Parse(polygonLayersNameValueCollection.Keys(0)) End If End Sub #End Region End Class End Namespace