0
  • 我有一个带有选项“1”、“2”和“3”的下拉列表。
  • 用户选择一个选项并按下按钮。
  • 根据他们选择的数字,将动态创建 1、2 或 3 个文本框,其 ID 为 textBox_1、textBox_2、textBox_3(例如)。
  • 然后用户将输入到每个文本框并按下另一个按钮,这些文本框的值将被验证并保存。

有人可以提供有关如何执行此(看似非常简单)任务的代码吗?我已经在我的实际项目中提出了两个冗长的问题,这些问题似乎被误解了,或者我得到了错误的结果(包括在 Page_Load/Page_Init 上创建文本框,使用中继器等)。

这需要动态完成,因为在我的项目中有很多控件,而且这个数字可能会有所不同。如果需要,我到目前为止可以发布我的代码,但在其他问题中,这似乎使事情变得混乱。

4

2 回答 2

1

创建动态文本框的代码:

Protected Sub ddl_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    If ((Not (ddl.SelectedValue) Is Nothing)  _
                AndAlso (Integer.Parse(ViewState("count").ToString) <> 0)) Then
        Dim i As Integer = 1
        Do While (i <= Integer.Parse(ddl.SelectedValue))
            Dim t As TextBox = New TextBox
            t.ID = ("TextBox_" + i)
            form1.Controls.Add(t)
            i = (i + 1)
        Loop
    ElseIf ((Not (ddl.SelectedValue) Is Nothing)  _
                AndAlso (Integer.Parse(ViewState("count").ToString) > 0)) Then
        Dim id As Integer = Integer.Parse(ViewState("count").ToString)
        Dim i As Integer = 1
        Do While (i <= Integer.Parse(ddl.SelectedValue))
            Dim t As TextBox = New TextBox
            t.ID = ("TextBox_" + id)
            form1.Controls.Add(t)
            id = (id + 1)
            i = (i + 1)
        Loop
    End If
End Sub

并在页面加载中添加这个

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)

      If Not IsPostBack Then ViewState("count") = 0 End If End Sub

要验证数据,请在您的页面中添加一个按钮控件(我将很快添加代码)

于 2012-08-20T14:17:53.177 回答
1

一个问题:如果控件已经创建,是否可以创建比下拉列表中的可用数量更多的控件(fe 3 +3)?

假设您允许创建超过数量的控件,您需要

  • 处理 Button 的Click事件
  • 将这些控件添加到页面上的占位符或面板(容器控件),根据它们的编号(fe textBox_4)使用正确的 id
  • 将控件总数存储在一个ViewStateSession变量中
  • Page_Init在或Page_Load(最迟)使用与以前相同的 ID重新创建这些控件

然后,您确保 ViewState 被加载并触发事件。

这是演示我的意思的代码:

从下拉列表事件处理程序加载动态控件,如何在按钮事件后保留控件

于 2012-08-20T14:20:27.983 回答