下面是我的代码,想要获得自动生成的textbox中的数据,就必须先获得它的ID,然后通过ID得到其text中的内容.请各位高手指点!非常感谢! Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load'自动生成一个table,将各个数据存入table的单元格中.table本身绑定到PlaceHolder控件中
Dim panduantb As New Table
For i = 1 To UBound(panduanArray)
Dim tbtr1 As New TableRow
Dim tbtr2 As New TableRow
Dim tbcell1 As New TableCell tbcell1.Text = i.ToString
tbtr1.Cells.Add(tbcell1)
Dim tbcell2 As New TableCell
tbcell2.Text = "问题"
tbtr1.Cells.Add(tbcell2)
Dim tbcell3 As New TableCell
Dim radiobuttonpanduan1 As New RadioButtonList
radiobuttonpanduan1.ID = "radiobuttonpanduan1" & i
radiobuttonpanduan1.Items.Add("正确")
radiobuttonpanduan1.Items.Add("错误")
radiobuttonpanduan1.RepeatDirection = RepeatDirection.Horizontal
tbcell3.Controls.Add(radiobuttonpanduan1)
tbtr2.Cells.Add(tbcell3)
panduantb.Rows.Add(tbtr1)
panduantb.Rows.Add(tbtr2)
'下面这个语句是错误的,但我不知道怎么改进
'我的目的是取得生成的radiobutton的value值,可惜下面的语句取不到值
panduananswerString &= radiobuttonpanduan1.SelectedItem.Text + "|"
Next PlaceHolder2.Controls.Add(panduantb)
End Sub
Dim panduantb As New Table
For i = 1 To UBound(panduanArray)
Dim tbtr1 As New TableRow
Dim tbtr2 As New TableRow
Dim tbcell1 As New TableCell tbcell1.Text = i.ToString
tbtr1.Cells.Add(tbcell1)
Dim tbcell2 As New TableCell
tbcell2.Text = "问题"
tbtr1.Cells.Add(tbcell2)
Dim tbcell3 As New TableCell
Dim radiobuttonpanduan1 As New RadioButtonList
radiobuttonpanduan1.ID = "radiobuttonpanduan1" & i
radiobuttonpanduan1.Items.Add("正确")
radiobuttonpanduan1.Items.Add("错误")
radiobuttonpanduan1.RepeatDirection = RepeatDirection.Horizontal
tbcell3.Controls.Add(radiobuttonpanduan1)
tbtr2.Cells.Add(tbcell3)
panduantb.Rows.Add(tbtr1)
panduantb.Rows.Add(tbtr2)
'下面这个语句是错误的,但我不知道怎么改进
'我的目的是取得生成的radiobutton的value值,可惜下面的语句取不到值
panduananswerString &= radiobuttonpanduan1.SelectedItem.Text + "|"
Next PlaceHolder2.Controls.Add(panduantb)
End Sub
解决方案 »
- 如何让treeview前面的复选框显示选中状态?
- 请问生成发布网站后,没有文件的空目录是不是就没有啦??
- vs 2005控件拖放问题
- 最后50分问一个简单问题,如何实现Live Mail那样的多窗格页面
- 数据访问问题
- ASP.NET研讨群,群号16450496希望对ASP。NET有兴趣爱好的朋友加入
- 水晶报表列太多界面放不下,该如何解决?
- 一加法运算!!!
- 请问!能不能默认TREEVIEW的第一层节点是展开的,第二曾以后的是合着的啊!!!!!!!!!
- C#中有变长数组吗??
- 高分求助:求asp.net2.0中微软自带控件的客户端函数及属性的说明书
- 我想把JS的变量的值拿到CS代码中用 怎么拿呢?
如:
radiobuttonpanduan1.OnSelectChange += new System.EventHandler(this.radioChanged);然后:
public void radioChanged(object sender, System.EventArgs e)
{
panduananswerString = ((RadioButtonList)sender).SelectedItem.Text;
}
在此我用的是C#.上面的方法,我没有测试过,希望对你有帮助。
创建动态RadioButtonList时,它本身什么都没选,所以
radiobuttonpanduan1.SelectedItem.Text取不到值
radiobuttonpanduan1.Items.Add("错误")
在上面两句的后面加上: radiobuttonpanduan1.Items[0].Selected = True
还有哪位兄弟给出方法?
我将尽快散分
现在我回家了,明天回公司试一试.晚上散分!
谢谢啦
Dim radiobuttonpanduan1 As New RadioButtonList
这里仅仅是实例化了一个radiobutonlist对象.
而你创建的radiobuttonlist对象的id却是
radiobuttonpanduan1.ID = "radiobuttonpanduan1" & i所以窗体上是没有radiobuttonpanduan1这个控件的
我这个菜鸟是没办法啦
发出来大家共享,但我还是不知道该怎样改进我的算法啊
----------------------------------------------------------------------
1.动态生成控件:
不管是在asp.net里还是在windows application里,每一个控件都可以作为母控件,在其中添加一些子的控件,当然添加可以是手工添加进去,而动态添加控件一般如下:(asp.net中)
dim textbox as textbox '动态添加一个textbox控件
textbox=new textbox()
textbox.id="test" '指定这个textbox的一些属性
textbox.text="好玩"
me.controls.add(textbox) '在当前窗口上动态添加这个textbox
在vs.net里头每个控件都有controls属性,此属性返回它所包含的子控件的集合,可以用add方法动态添加一个控件,clear方法清空所有控件等等
2.动态获得控件的句柄值(也在asp.net中)
如果要获得一个控件的子控件的句柄值,只需从它的controls集合里返回一个就可以,假设上例中窗口中只有我们动态生成的textbox一个控件
则:dim textbox as textbox
textbox=me.controls(0) '获得句柄值,如有多个,则可用me.controls(1)、me.controls(2)等等
response.write(textbox.id()) '它的属性值
response.write(textbox.text())
而如果要获得它的母控件(即包含它的控件)的句柄值
只需这样:textbox.parent即为当前窗口的句柄值了
也可以遍历一个控件下所有的子控件
for i=0 to me.controls.count-1
response.write(me.controls(i).id)
next在windows application里像controls的各种属性也是能用的,而且用法于在asp.net中一致,只是在beta2版里弹不出来这个属性,不知为何,也许这是beta2编译器的一个小bug巴!
总结:用动态的方法来获得和生成控件给程序带来很大的灵活性!其主要是用控件的controls集合的一些方法了!
现在正在看这一篇文章
http://djks.xuevb.net/Article/516333
希望对各位有帮助
Handles Me.Load
Dim panduantb As New Table
For i As Integer = 1 To 5
Dim tbtr1 As New TableRow
Dim tbtr2 As New TableRow
Dim tbcell1 As New TableCell tbcell1.Text = i.ToString
tbtr1.Cells.Add(tbcell1)
Dim tbcell2 As New TableCell
tbcell2.Text = "问题"
tbtr1.Cells.Add(tbcell2)
Dim tbcell3 As New TableCell
Dim radiobuttonpanduan1 As New RadioButtonList
radiobuttonpanduan1.ID = "radiobuttonpanduan1" & i
radiobuttonpanduan1.Items.Add("正确")
radiobuttonpanduan1.Items.Add("错误")
radiobuttonpanduan1.RepeatDirection = RepeatDirection.Horizontal
tbcell3.Controls.Add(radiobuttonpanduan1)
tbtr2.Cells.Add(tbcell3)
panduantb.Rows.Add(tbtr1)
panduantb.Rows.Add(tbtr2)
'这里说明 radiobuttonpanduan1 存在!
AddHandler radiobuttonpanduan1.SelectedIndexChanged, _
AddressOf radiolist_SelectedIndexChanged
Next
Me.Form.Controls.Add(panduantb)
Me.Form.Controls.Add(New Button())
End Sub Protected Sub radiolist_SelectedIndexChanged(ByVal sender As Object, _
ByVal e As System.EventArgs)
Me.Page.ClientScript.RegisterStartupScript(Me.GetType(), "result", _
"<script>alert('" + DirectCast(sender, RadioButtonList).ID + _
" 选择 ->" + DirectCast(sender, RadioButtonList).SelectedItem.Text + _
"|" + "');</script>")
End Sub
很遗憾,asp.net2.0 对于动态添加的控件的处理机制与asp.net1.1不同,做了大大的简化。你的代码,我印象中在asp.net1.1中,如果将“PlaceHolder2.Controls.Add(panduantb)”那句提前到for循环之前执行,应该是可以取得客户端radionButtonlist选择的值的。不过既然已经是asp.net2.0时代了,我就不再去叙述asp.net1.1对于控件添加到页面控件树上是怎样进行复杂的操作了。关键只有一个,就是在asp.net1.1中当控件放到页面控件书之后“立刻”可以获得asp.net填入的post值,从而你访问SelectedIndex应该不会出错;而在asp.net2.0中则完全省去了这个步骤,而是在page_load之后才统一填入动态产生的控件的客户端post值,此时SelectedIndex就会得到“object未实例化”的错误,因为没有post值。asp.net2.0的机制简单多了,也更强调“事件编程”而强制你不能再用那种顺序编程的设计眼光。
你的代码在page_load结束之前,所以此时SelectedIndex就会得到“object未实例化”的错误
Private WithEvents r5 As RadioButtonList Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
Dim panduantb As New Table
Dim outStr As String = String.Empty
For i As Integer = 1 To 5
Dim tbtr1 As New TableRow
Dim tbtr2 As New TableRow
panduantb.Rows.Add(tbtr1)
panduantb.Rows.Add(tbtr2)
Dim tbcell1 As New TableCell
tbcell1.Text = i.ToString
tbtr1.Cells.Add(tbcell1)
Dim tbcell2 As New TableCell
tbcell2.Text = "问题"
tbtr1.Cells.Add(tbcell2)
Dim tbcell3 As New TableCell
Dim radiobuttonpanduan1 As New RadioButtonList
tbtr2.Cells.Add(tbcell3)
radiobuttonpanduan1.ID = "radiobuttonpanduan1" & i
radiobuttonpanduan1.Items.Add("正确")
radiobuttonpanduan1.Items.Add("错误")
radiobuttonpanduan1.RepeatDirection = RepeatDirection.Horizontal
tbcell3.Controls.Add(radiobuttonpanduan1)
If i = 1 Then
r1 = radiobuttonpanduan1
ElseIf i = 5 Then
r5 = radiobuttonpanduan1
End If
Next
Me.Form.Controls.Add(panduantb)
Me.Form.Controls.Add(New Button())
End Sub Protected Sub r5_SelectedIndexChanged(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles r5.SelectedIndexChanged
Me.Page.ClientScript.RegisterStartupScript(Me.GetType(), "result", _
"<script>alert('" + r1.ID + " 选择 ->" + r1.SelectedItem.Text + _
"\r\n" + r5.ID + " 选择 ->" + r5.SelectedItem.Text + _
"|" + "');</script>")
End Sub这里当改变第5个选择(r5)的时候,同时也显示第一个(r1)。注意,根本不用通过r1的id去寻找它!
Inherits System.Web.UI.Page
Implements IPostBackEventHandler Private t1, t2, t3 As TextBox Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
Dim panduantb As New Table
Dim tbtr1 As New TableRow
Dim tbtr2 As New TableRow
panduantb.Rows.Add(tbtr1)
panduantb.Rows.Add(tbtr2)
Dim tbcell As New TableCell
tbtr1.Cells.Add(tbcell)
t1 = New TextBox
tbcell.Controls.Add(t1)
tbcell = New TableCell
tbcell.Text = "+"
tbtr1.Cells.Add(tbcell)
tbcell = New TableCell
tbtr1.Cells.Add(tbcell)
t2 = New TextBox
tbcell.Controls.Add(t2)
t2.Attributes("onkeypress") = "if(event.keyCode==13)" + _
Me.Page.ClientScript.GetPostBackEventReference(Me, "")
tbcell = New TableCell
tbcell.Text = "="
tbtr2.Cells.Add(tbcell)
tbcell = New TableCell
tbcell.ColumnSpan = 2
tbtr2.Cells.Add(tbcell)
t3 = New TextBox
t3.ReadOnly = True
tbcell.Controls.Add(t3)
Me.Form.Controls.Add(panduantb)
End Sub Public Sub RaisePostBackEvent1(ByVal eventArgument As String) _
Implements System.Web.UI.IPostBackEventHandler.RaisePostBackEvent
Try
t3.Text = Integer.Parse(t1.Text) + Integer.Parse(t2.Text)
Catch
t3.Text = "请在上面填入两个整数,然后按回车。"
End Try
End Sub
End Class
没有必要通过id去查找,就不要通过id。这不仅仅是为了性能(当页面上有几千一个控件的时候都通过id去查找完全是中浪费),更是为了编程的可靠性,所谓“言多必假”,当记错了要点的时候也就意味着会误用。当然按说所有动态产生的控件都应该尽量明确设置id,尽管没有任何作用也要这样。
http://cathsfz.sitesled.com/2006/04/loadpostdata.htm不过 sp1234(如果有懂得asp.net三分之一的人,工作就简单多了) 说ASP.NET 1.x时任何新添加的控件都会直接进行LoadPostData,我记得不是这样吧,ASP.NET 1.x里面也是仅仅有两次LoadPostData而且是集中执行的,和2.0一样分别在Page_Load的前后各执行一次。