动态创建控件的问题3个,有源代码。 高分求解(今晚揭帖)

chinank 2006-08-08 05:04:52
要实现根据数据库里的数据创建复选框,如果复选框的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
...全文
452 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinank 2006-08-09
  • 打赏
  • 举报
回复
wjjdnajj(色空) ,呵呵,我的第二版就打算这样改,不过现在来不急了呀,今晚是最后一天的期限了。
goody9807 2006-08-09
  • 打赏
  • 举报
回复
没必要用 服务器端的
wjjdnajj 2006-08-09
  • 打赏
  • 举报
回复
我认为你应该使用xmlhttp读取数据,然后使用javascript来生成html的checkbox控件,这样的话你可以省掉很多关于回传的麻烦。

另外javascript生成的控件也可以用for语句来加id的。
kaixinchengbao2006 2006-08-08
  • 打赏
  • 举报
回复
vb不懂
顶一下吧
chinank 2006-08-08
  • 打赏
  • 举报
回复
是我的代码贴的太多了么?怎么没有人正面回答呢?
看来等明天了。
iflang 2006-08-08
  • 打赏
  • 举报
回复
对 e 的某些属性看一下,,,我对VB不懂,,,但我想大体应该差不多吧
iflang 2006-08-08
  • 打赏
  • 举报
回复
对于第一个和第二个问题,,,,我建议你看一下事件触发对象 e
chinank 2006-08-08
  • 打赏
  • 举报
回复
checkbox控件,经理说脚本不安全,所以最好写在.vb里,
ustbwuyi 2006-08-08
  • 打赏
  • 举报
回复
为什么不用js创建呢..vb看不懂...看见dim开头的就不知道
fei30wang 2006-08-08
  • 打赏
  • 举报
回复
你用的什么控件
chinank 2006-08-08
  • 打赏
  • 举报
回复
可是用数据库创建html的控件之后还要相应html控件的事件,我没有做过,求教了。
leafsword_519 2006-08-08
  • 打赏
  • 举报
回复
你把动态生成的页面的HTML源文件仔细看看,可能会发现问题所在。
leafsword_519 2006-08-08
  • 打赏
  • 举报
回复
可是需要用id,html的可以有id么?

--------------
html的有name

<SCRIPT>
function fnGetNames(){
// Returns a collection with 2 INPUT type=text elements.
var aInput=document.getElementsByName("firstName");
}
</SCRIPT>
<INPUT TYPE="text" NAME="firstName">
<INPUT TYPE="text" NAME="firstName">
<INPUT TYPE="button" VALUE="Get Names" onclick="fnGetNames()">
chinank 2006-08-08
  • 打赏
  • 举报
回复
我觉得那三个问题好奇怪,是逻辑有错误么?真头痛。
chinank 2006-08-08
  • 打赏
  • 举报
回复
谢谢!nzcsnewbie()
nzcsnewbie 2006-08-08
  • 打赏
  • 举报
回复
不行,VB的代码,要是C#的还能帮你看看
chinank 2006-08-08
  • 打赏
  • 举报
回复
可是需要用id,html的可以有id么?
孟子E章 2006-08-08
  • 打赏
  • 举报
回复
我觉得使用Html的 CheckBox就可以了,没有必要使用服务器控件,而且是动态生成的,

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧