All pastes #204567 Raw Edit

Untitled

public text v1 · immutable
#204567 ·published 2006-10-16 02:12 UTC
rendered paste body
' DMK28092004 Simple Composite Control for PAX selection
' A few things I've discovered...
' The MS directed convention of placing constructor code in CreateChildControls() and then
' calling EnsureChildControls() from everywhere that access a child control is a Flawed method.
' Build child controls in Init instead...
' DMK080205 Added ReadOnly Property for simple output
Public Class satchPAX
    Inherits System.Web.UI.WebControls.WebControl
    Implements INamingContainer

    Dim ddlAdults As DropDownList
    Dim ddlChildren As DropDownList
    Dim ddlInfants As DropDownList

    Sub New()
        MyBase.New()
        Me.Width = Unit.Pixel(100)
    End Sub

    Protected Overrides Sub CreateChildControls()
        ' Moved to Initialize as is recommended due to broken functionality
    End Sub

    Protected Overrides Sub render(ByVal output As HtmlTextWriter)
        'EnsureChildControls()
        RenderChildren(output)
    End Sub
    <System.ComponentModel.Description("(Satch) The number of Adults")> _
    Property Adults() As Integer
        Get
            'EnsureChildControls()
            Return ddlAdults.SelectedValue
        End Get
        Set(ByVal Value As Integer)
            'EnsureChildControls()
            ddlAdults.SelectedValue = Value
        End Set
    End Property
    <System.ComponentModel.Description("(Satch) The number of Children")> _
    Property Children() As Integer
        Get
            'EnsureChildControls()
            Return ddlChildren.SelectedValue
        End Get
        Set(ByVal Value As Integer)
            'EnsureChildControls()
            ddlChildren.SelectedValue = Value
        End Set
    End Property
    <System.ComponentModel.Description("(Satch) Number of Infants")> _
    Property Infants() As Integer
        Get
            'EnsureChildControls()
            Return ddlInfants.SelectedValue
        End Get
        Set(ByVal Value As Integer)
            'EnsureChildControls()
            ddlInfants.SelectedValue = Value
        End Set
    End Property
    Property [ReadOnly]() As Boolean
        Get
            Return CType(ViewState("readonly"), Boolean)
        End Get
        Set(ByVal Value As Boolean)
            ViewState("readonly") = Value
        End Set
    End Property

    Private Sub satchPAX_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Init
        ddlAdults = New DropDownList
        ddlChildren = New DropDownList
        ddlInfants = New DropDownList
        ' If they change costed pax details, reset the package search section
        ddlAdults.Attributes.Add("OnChange", "resetquote()")
        ddlChildren.Attributes.Add("OnChange", "resetquote()")
        ddlAdults.ID = "adults" ' so we can reference them in client-side js
        ddlChildren.ID = "children"
        Dim range(8) As ListItem
        Dim range2(8) As ListItem ' need to keep them separate
        For i As Integer = 0 To 8
            range(i) = New ListItem(i.ToString)
            range2(i) = New ListItem(i.ToString)
        Next
        ddlAdults.Items.AddRange(range)
        ddlAdults.SelectedValue = "1" ' default to 1 adult
        ddlChildren.Items.AddRange(range2)
        ddlInfants.Items.AddRange(New ListItem() {New ListItem("0"), New ListItem("1"), New ListItem("2")})
        Dim lit1 As New Literal
        Dim lit2 As New Literal
        Dim lit3 As New Literal
        Dim lit4 As New Literal
        lit1.Text = "<table><tr><td class=""" & CssClass & """>Adults</td><td>"
        ' DMK29092004 hard-coded the font-weight to prevent style class from breaking 'the way its meant to look'
        lit2.Text = "</td></tr><tr><td class=""" & CssClass & """ style=""font-weight: normal;"">Children</td><td>"
        lit3.Text = "</td></tr><tr><td class=""" & CssClass & """ style=""font-weight: normal;"">Infants</td><td>"
        lit4.Text = "</td></tr></table>"
        If [ReadOnly] Then
            Controls.Add(lit1)
            Controls.Add(New LiteralControl(ddlAdults.SelectedValue))
            Controls.Add(lit2)
            Controls.Add(New LiteralControl(ddlChildren.SelectedValue))
            Controls.Add(lit3)
            Controls.Add(New LiteralControl(ddlInfants.SelectedValue))
            Controls.Add(lit4)
        Else
            Controls.Add(lit1)
            Controls.Add(ddlAdults)
            Controls.Add(lit2)
            Controls.Add(ddlChildren)
            Controls.Add(lit3)
            Controls.Add(ddlInfants)
            Controls.Add(lit4)
        End If
    End Sub
    ' tells the compiler not to expect a CLS compliant return type
    <CLSCompliant(False)> _
    Public Function ToClassPax() As WorldLogic.resclasses.tQuote.tPax
        Dim tmp As New WorldLogic.resclasses.tQuote.tPax
        tmp.Adults = Adults
        tmp.Children = Children
        Return tmp
    End Function
    Public Overrides Function ToString() As String
        Dim tmp As String
        If Adults = 1 Then
            tmp = Adults.ToString & " adult, "
        Else
            tmp = Adults.ToString & " adults, "
        End If
        If Children = 1 Then
            tmp &= Children.ToString & " child, "
        ElseIf Children > 0 Then
            tmp &= Children.ToString & " children, "
        End If
        If Infants = 1 Then
            tmp &= Infants.ToString & " infant"
        ElseIf Infants > 0 Then
            tmp &= Infants.ToString & " infants"
        End If
        Return tmp
    End Function
End Class