meluckeve

导航

动态创建控件

今天,我把Windows程序开发的经验用到了Web的开发中去,遇到了一个“怪异的问题”,按键click后,咋click事件发生在Page的更新后,郁闷了好久。看了一下Asp.Net的内在机理终于想明白了。我利用动态创建控件做了一个左边保持输入数据,右边点击下拉/掩蔽菜单。

Partial Class _DefaultClass _Default
    Inherits System.Web.UI.Page
    Dim book(1) As ArrayList

    Protected Sub Page_Load()Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        BuildDynamicUIControlsAndCollects()
    End Sub
    Private Sub BuildDynamicUIControlsAndCollects()Sub BuildDynamicUIControlsAndCollects()
        Dim i As Integer
        palLeft.Controls.Add(New LiteralControl("<H3>Input data</H3>"))
        palLeft.Controls.Add(New LiteralControl("<TABLE Width=100% CELLPADDING='0' CELLSPACING='0' BORDER='1' >"))
        palLeft.Controls.Add(New LiteralControl("<TR><TD>"))
        palLeft.Controls.Add(New LiteralControl("Name"))
        palLeft.Controls.Add(New LiteralControl("</TD><TD>"))
        Dim txtItemName As New TextBox
        txtItemName.ID = "txtItemName"
        Me.palLeft.Controls.Add(txtItemName)
        palLeft.Controls.Add(New LiteralControl("</TD></TR>"))
        palLeft.Controls.Add(New LiteralControl("<TR><TD>"))
        palLeft.Controls.Add(New LiteralControl("TEL"))
        palLeft.Controls.Add(New LiteralControl("</TD><TD>"))
        Dim txtItemTel As New TextBox
        txtItemTel.ID = "txtItemTel"
        Me.palLeft.Controls.Add(txtItemTel)
        palLeft.Controls.Add(New LiteralControl("</TD></TR>"))
        palLeft.Controls.Add(New LiteralControl("</TABLE>"))

        palRight.Controls.Add(New LiteralControl("<H3>Dropdown Down List</H3>"))
        palRight.Controls.Add(New LiteralControl("<TABLE Width=100% CELLPADDING='0' CELLSPACING='0' BORDER='1' >"))
        For i = 0 To 1
            palRight.Controls.Add(New LiteralControl("<TR><TD>"))
            Dim lb As New LinkButton
            lb.ID = "lbBook" & i
            If (Me.hfBookIndex.Value = CStr(i)) Then
                lb.Text = "- " & "Book" & i
            Else
                lb.Text = "+ " & "Book" & i
            End If
            lb.CommandArgument = CStr(i)
            AddHandler lb.Command, New CommandEventHandler(AddressOf Me.BookCommand)
            Me.palRight.Controls.Add(lb)
            palRight.Controls.Add(New LiteralControl("</TD></TR>"))
        Next
        palRight.Controls.Add(New LiteralControl("</TABLE>"))

    End Sub
    Private Sub BookCommand()Sub BookCommand(ByVal sender As Object, ByVal e As CommandEventArgs)
        If (Me.hfBookIndex.Value = e.CommandArgument.ToString) Then
            Me.hfBookIndex.Value = ""
        Else
            Me.hfBookIndex.Value = e.CommandArgument.ToString
        End If
    End Sub

    Protected Sub Page_PreRender()Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
        Dim i, j As Integer
        If Page.IsPostBack Then
            palRight.Controls.Clear()
            palRight.Controls.Add(New LiteralControl("<H3>Dropdown List</H3>"))
            palRight.Controls.Add(New LiteralControl("<TABLE Width=100% CELLPADDING='0' CELLSPACING='0' BORDER='1' >"))
            For i = 0 To 1
                palRight.Controls.Add(New LiteralControl("<TR><TD>"))
                Dim lb As New LinkButton
                lb.ID = "lbBook" & i
                If (Me.hfBookIndex.Value = CStr(i)) Then
                    lb.Text = "- " & "Book" & i
                Else
                    lb.Text = "+ " & "Book" & i
                End If
                lb.CommandArgument = CStr(i)
                AddHandler lb.Command, New CommandEventHandler(AddressOf Me.BookCommand)
                Me.palRight.Controls.Add(lb)
                palRight.Controls.Add(New LiteralControl("</TD></TR>"))
                If (Me.hfBookIndex.Value = CStr(i)) Then
                    For j = 0 To book(i).Count - 1
                        palRight.Controls.Add(New LiteralControl("<TR><TD>"))
                        palRight.Controls.Add(New LiteralControl(book(i)(j).ToString))
                        palRight.Controls.Add(New LiteralControl("</TD></TR>"))
                    Next
                End If
            Next
            palRight.Controls.Add(New LiteralControl("</TABLE>"))

        End If
    End Sub

    Public Sub New()Sub New()
        book(0) = New ArrayList
        book(0).Add("Chapter 0")
        book(0).Add("Chapter 1")
        book(0).Add("Chapter 2")

        book(1) = New ArrayList
        book(1).Add("Chapter 0")
        book(1).Add("Chapter 1")
        book(1).Add("Chapter 2")
        book(1).Add("Chapter 3")

    End Sub
End Class

posted on 2005-07-13 17:57  lucksleep  阅读(256)  评论(0编辑  收藏  举报