2

I am trying to create an ASP.net server control that uses controls from the AjaxControlToolkit. Essentially, the control is a dropdownlist and a button. When the user clicks the button, a modal dialog (modalPopupExtender) opens. The dialog has a checkboxlist with a list of options to chose from. When the user selects their choice(s) and hits the Ok button, in the dialog, the dialog closes and the selected choices should get added to the dropdownlist. What is happening, though, is that when the user makes their selection and hits OK only the last item in the Checkboxlist gets added. I think it may have something to do with the inherited functions I override. Can anyone tell me what I may be doing wrong? Here is the relevant code:

<DefaultProperty("Text"), ToolboxData("<{0}:myServerControl runat=server> 
        </{0}:myServerControl >")> _
Public Class myServerControl 
Inherits CompositeControl
Implements INamingContainer, IPostBackEventHandler

Private myDropDownListAs New DropDownList
Private addPlant As New Button
Private _updatePanel As UpdatePanel
Private _modalExtenderOne As AjaxControlToolkit.ModalPopupExtender
Private lblWarning As Label
Private cb1 As New CheckBoxList
Private btnSavePlants As New Button
Private btnCancel As New Button

  Protected Overrides Function SaveViewState() As Object
    Return New Pair(MyBase.SaveViewState(), Nothing)
End Function


Protected Overrides Sub LoadViewState(ByVal savedState As Object)
    MyBase.LoadViewState(CType(savedState, Pair).First)
    EnsureChildControls()
End Sub

Protected Overrides Sub CreateChildControls()
    createDynamicControls()
    MyBase.CreateChildControls()
End Sub

Protected Overrides Sub OnInit(ByVal e As System.EventArgs)       
    MyBase.OnInit(e)

End Sub
Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
    MyBase.OnLoad(e)
End Sub

 Private Sub createDynamicControls()
    Controls.Clear()
    AddHandler btnSavePlants.Click, AddressOf saveItems_Click
    _updatePanel = New UpdatePanel
    Dim myTable As New Table
    myTable = buildControl()  ' a funciton that returns a built table
    Dim myPanel As New Panel
    myPanel = buildDialog()  'a function taht returns a build modal dialog
    _updatePanel.ContentTemplateContainer.Controls.Add(myTable)
    _updatePanel.ContentTemplateContainer.Controls.Add(myPanel)
    Me.Controls.Add(_updatePanel)
End Sub

  Protected Sub saveItems_Click(ByVal sender As Object, ByVal e As EventArgs)
    Me.myDropDownList.Items.Clear()
    Try
        For Each i As ListItem In Me.cb1.Items
            If (i.Selected = True) Then
                Dim newLi As New ListItem
                With newLi
                    .Selected = False
                    .Text = i.Text
                    .Value = i.Value
                End With

                Me.myDropDownList.Items.Add(newLi)
            Else                    
            End If

        Next
    Catch ex As Exception

    End Try

End Sub

   Public Sub bindSelections(ByVal myList As List(Of myObject))

    For Each p As myObjectIn myList
        Dim newLI As New ListItem
        newLI.Value = p.EquipmentPK
        newLI.Text = p.EquipmentID

        Me.cb1.Items.Add(newLI)

    Next



End Sub


Public Sub RaisePostBackEvent(ByVal eventArgument As String) Implements System.Web.UI.IPostBackEventHandler.RaisePostBackEvent

End Sub

End Class
jason
  • 3,821
  • 10
  • 63
  • 120
  • I don't see what is calling `bindSelections` or when it would be called. On postback, dynamic items must be recreated before you would be able to work with them reliably. Generally, this means that you can't wait until `CreateChildControls()` on postback -- you need to create the child controls as early as possible, even if they are "wrong." With more info, I could be more help. – Andrew Sep 01 '14 at 19:38

0 Answers0