' 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