动态创建控件的问题3个,有源代码。 高分求解(今晚揭帖)
要实现根据数据库里的数据创建复选框,如果复选框的text里包含[],则在他选中的同时控件div1也显示(平时室隐藏的),div1里有个按钮和文本框,点击后层隐藏,并且把文本框的值更新到刚才点击的那个复选框的[]里,
现在控件都创建出来了,基本也实现了,可是和预计的有点不一样:
1.不管选中那种类型的复选框,总需要点击2次才可以,第一次好像是刷新。
2.如果我的复选框有多个,即使我只点击了一个复选框,他的ch_check事件都会执行多次(有几个执行几次)。
3.页面上还有个后退按钮,是实现ie上那个后退功能的,但是我点击后页面白了,啥也没有了,多点几次后就回到了最开始的页面了,
Private Sub ch_check(ByVal sender As Object, ByVal e As EventArgs)
/* 是checkbox的checkedchange事件 */
Dim Ch As CheckBox
Ch = CType(sender, CheckBox)
If Ch.Checked Then
If Ch.Text.ToString.IndexOf("[") >= 0 Then
DIV1.Visible = True
Session("checkbox") = Ch.Text
Session("checkboxid") = Ch.ID
Else
DIV1.Visible = False
End If
Else
If Ch.Text.ToString.IndexOf("[") >= 0 Then '做文本值的修改,去掉[]的内容
Ch.Text = Mid(Ch.Text, 1, Ch.Text.IndexOf("[")) & Mid(Ch.Text, Ch.Text.IndexOf("]"), Ch.Text.Trim.Length)
Else
DIV1.Visible = False
End If
DIV1.Visible = False
End If
End Sub
Private Sub creat_cont()
'建立控件
Dim ds1 As DataSet = PM.Get_tjxm_bykshid(DDL3.SelectedValue, Session("BBid"), Session("XMid"))
Dim i As Int16
Dim j As Int16
Panel2.Controls.Clear()
Panel4.Controls.Clear() 'checkbox
Dim Table22 As New Table
Dim tcell22 As New TableCell
Dim trow22 As New TableRow
Dim cc22 As Int16 = 0
If ds1.Tables(1).Rows.Count > 0 Then 'checkbox
For i = 0 To ds1.Tables(1).Rows.Count - 1
Dim ch(i) As CheckBox
ch(i) = New CheckBox
ch(i).Text = ds1.Tables(1).Rows(i)("jgtsh").ToString
ch(i).ToolTip = ds1.Tables(1).Rows(i)("tjxmid")
ch(i).AutoPostBack = True
ch(i).ID = "ch" & i
Try
If Dss.Tables(0).Rows.Count > 0 Then
For j = 0 To Dss.Tables(0).Rows.Count - 1
If Dss.Tables(0).Rows(i)("tjjg").ToString.IndexOf(ch(i).Text) >= 0 Then
ch(i).Checked = True
End If
Next
End If
Catch ex As Exception
GoTo aa
End Try
aa: AddHandler ch(i).CheckedChanged, AddressOf ch_check
tcell22.BorderWidth.Pixel(1)
tcell22.Width = New Unit("14%")
tcell22.Height.Pixel(100)
tcell22.Controls.Add(ch(i))
trow22.Cells.Add(tcell22)
tcell22 = New TableCell
If trow22.Cells.Count = 3 Then
Table22.Rows.Add(trow22)
trow22 = New TableRow
End If
Next
Table22.Rows.Add(trow22)
Panel4.Controls.Add(Table22)
End If
End Sub
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
If Not IsPostBack Then
DIV1.Visible = False
Session("BBid") = ""
Session("xmid") = ""
End If
creat_cont()
End Sub
Private Sub Bv1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bv1.Click
'确定 div1的按钮
Dim TmpStr As String
DIV1.Visible = False
Dim i As Int16
Dim j As Int16
TmpStr = Session("checkbox").ToString.Insert(Session("checkbox").ToString.IndexOf("[") + 1, Text1.Value)
For i = 0 To CType(Panel4.Controls(0), Table).Rows.Count - 1
For j = 0 To CType(CType(Panel4.Controls(0), Table).Controls(i), TableRow).Cells.Count - 1
CType(CType(CType(Panel4.Controls(0), Table).Controls(i), TableRow).Cells(j).FindControl(Session("checkboxid")), CheckBox).Text = TmpStr
Next
Next
Text1.Value = ""
Session("checkbox")=""
Session("checkboxid")=""
End Sub
End Class