' ' ' Typical customizations that may be done in this class include ' - adding custom event handlers ' - overriding base class methods Imports System.ComponentModel Namespace Persons ''' ''' Renders a hyperlink that displays the app's page in a popup window. ''' ''' ''' Unlike a regular HyperLink, this control's NavigateUrl is ReadOnly and derived automatically at runtime. ''' ''' ''' Public Class FvLlsHyperLink Inherits BaseClasses.Web.UI.WebControls.PopupWindowHyperLink Public Sub New() MyBase.New() Me.WindowFeatures = "width=600, height=400, resizable, scrollbars" Me.WindowName = "llswin" Me.ImageUrl = "~/Images/LargeListSelector.gif" 'Me.Style.Add("vertical-align", "middle") Me.CssClass = "llslink" Me.ToolTip = "More" End Sub 'Shadow the NavigateUrl Property to return a runtime-derived url and to make it ReadOnly. _ Public Shadows ReadOnly Property NavigateUrl() As String Get Return Me.DeriveNavigateUrl() End Get 'Set(ByVal value As String) ' ViewState("NavigateUrl") = value 'End Set End Property Private _ControlToUpdate As String = "" Public Property ControlToUpdate() As String Get Return Me._ControlToUpdate End Get Set(ByVal value As String) Me._ControlToUpdate = value End Set End Property Private _MinListItems As Integer = 100 _ Public Property MinListItems() As Integer Get Return Me._MinListItems End Get Set(ByVal value As Integer) If (value < 0) Then value = 0 End If Me._MinListItems = value End Set End Property Private _Table As String = "" Public Property Table() As String Get Return Me._Table End Get Set(ByVal value As String) Me._Table = value End Set End Property Private _Field As String = "" Public Property Field() As String Get Return Me._Field End Get Set(ByVal value As String) Me._Field = value End Set End Property Private _DisplayField As String = "" Public Property DisplayField() As String Get Return Me._DisplayField End Get Set(ByVal value As String) Me._DisplayField = value End Set End Property Private _Formula As String = "" Public Property Formula() As String Get Return Me._Formula End Get Set(ByVal value As String) Me._Formula = value End Set End Property Public Function GetControlToUpdate() As Control If (Len(Me.ControlToUpdate) > 0) Then Return Me.NamingContainer.FindControl(Me.ControlToUpdate) End If Return Nothing End Function Protected Function DeriveNavigateUrl() As String Dim c As Control = Me.GetControlToUpdate() Dim tableName As String = Me.Table Dim fieldName As String = Me.Field Dim displayFieldName As String = Me.DisplayField Dim formula As String = Me.Formula If (IsNothing(displayFieldName)) Then displayFieldName = fieldName End If ' encrypt all the fields tableName = CType(Me.Page, Persons.UI.BaseApplicationPage).Encrypt(tableName) fieldName = CType(Me.Page, Persons.UI.BaseApplicationPage).Encrypt(fieldName) displayFieldName = CType(Me.Page, Persons.UI.BaseApplicationPage).Encrypt(displayFieldName) formula = CType(Me.Page, Persons.UI.BaseApplicationPage).Encrypt(formula) Return String.Format( _ "~/Shared/LargeListSelector.aspx?Table={0}&Field={1}&DisplayField={2}&Target={3}&Formula={4}&usnh=n", _ HttpUtility.UrlEncode(tableName), _ HttpUtility.UrlEncode(fieldName), _ HttpUtility.UrlEncode(displayFieldName), _ HttpUtility.UrlEncode(c.ClientID), _ HttpUtility.UrlEncode(formula)) End Function Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) If (Me.MinListItems > 0) Then 'Make this control invisible if the ControlToUpdate is a list with < Me.MinListItems items. Dim c As Control = Me.GetControlToUpdate() If Not IsNothing(c) AndAlso Not c.Visible Then Return End If If (TypeOf (c) Is System.Web.UI.WebControls.ListControl) Then Dim lc As System.Web.UI.WebControls.ListControl = CType(c, System.Web.UI.WebControls.ListControl) Dim listItemCount As Integer = lc.Items.Count 'Me.Visible = (listItemCount >= Me.MinListItems) If (Not listItemCount >= Me.MinListItems) Then Return 'Don't render the control End If End If End If 'Set the inherited NavigateUrl property's value to the shadow's (derived) value Dim baseNavUrl As String = MyBase.NavigateUrl MyBase.NavigateUrl = Me.NavigateUrl MyBase.Render(writer) 'Un-set the inherited NavigateUrl property to the original value MyBase.NavigateUrl = baseNavUrl End Sub Protected Overrides Sub LoadViewState(ByVal savedState As Object) MyBase.LoadViewState(savedState) Me._ControlToUpdate = CStr(Me.ViewState.Item("ControlToUpdate")) Me._MinListItems = CInt(Me.ViewState.Item("MinListItems")) Me._Table = CStr(Me.ViewState.Item("Table")) Me._Field = CStr(Me.ViewState.Item("Field")) Me._DisplayField = CStr(Me.ViewState.Item("DisplayField")) Me._Formula = CStr(Me.ViewState.Item("Formula")) End Sub Protected Overrides Function SaveViewState() As Object Me.ViewState.Item("ControlToUpdate") = Me._ControlToUpdate Me.ViewState.Item("MinListItems") = Me._MinListItems Me.ViewState.Item("Table") = Me._Table Me.ViewState.Item("Field") = Me._Field Me.ViewState.Item("DisplayField") = Me._DisplayField Me.ViewState.Item("Formula") = Me._Formula Return MyBase.SaveViewState() End Function End Class End Namespace