动态创建控件
今天,我把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
浙公网安备 33010602011771号