2014-02-07 131 views
2

我想,我动态创建我的文本框的值,当我点击一个按钮如何让动态创建文本框的文本值

我需要做到这一点引起我的文本框的值用于检索来自数据库的数据

我怎么能做到这件事?

流量按钮点击 - 创建文本框 - 按钮单击 - - 与值填充文本框获取文本框的文本

这里是我的代码,以使文本框

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    For i As Integer = 0 To 4 
     textbox = New TextBox With {.ID = "TextBox" & i} 
     plchld.Controls.Add(textbox) 
    Next 
End Sub 

我已经试过这样的事情但这些代码并没有提前上班

Protected Sub OkButton_Click(sender As Object, e As EventArgs) Handles OkButton.Click 
    Dim a(5) As String 
    For i As Integer = 0 To 4 
     a(i) = CType(plchld.FindControl("Textbox" & i), TextBox).Text 
    Next 
End Sub 

感谢您的帮助

编辑的答案

我发现解决这个的方式。我使用request.form来获取我的文本框的值。

感谢任何人,参与

问候,

朱利安

+0

是ASP.Net Web应用程序或Windows应用程序? – Lingaraj

回答

3

这是我如何在我的asp.net应用程序来完成。

创建动态控制

TextBox txtDate = new TextBox(); 
txtDate.EnableViewState = true; 
txtDate.ID = "PreixValue" + 1; 
txtDate.Text = "07 Feb 2014" 
pnl.controls.add(txtdate); 

要从文本

DateTime datefrom = DateTime.Now ; 

       for (int cnt = 0; cnt < Request.Form.Count; cnt++) 
       { 
        if (Request.Form.AllKeys[cnt].Contains("Prefixvalue")) 
        { 
         int ParamStartPoint = Request.Form.AllKeys[cnt].IndexOf("Prefix") + 4; 
         int ParamNameLength = Request.Form.AllKeys[cnt].Length - ParamStartPoint; 

         string[] ControlName = Request.Form.AllKeys[cnt].Substring(ParamStartPoint, ParamNameLength).Split('$'); 

           if (ControlName[0] == "Date From") 
           { 

        datefrom = DateTime.Parse(Request.Form[cnt]); 
        //datefrom has value now 
           } 
    } 
} 

这是我如何在我的web应用程序完成的,但也有可能是其他的方式实现这一目标检索值。

基本上,当您在webform中创建动态控件时,将通过Request.Form提供。

希望这可以帮助你。

+0

你这样做的方式是我找到工作的方式..使用request.form我可以得到我的文本框的价值..我会标记你的答案和我的问题的答案,并感谢回答 –

+0

@JulianSanjaya,很高兴它帮助你......谢谢你打分答案...... – Lingaraj

0
Protected Sub OkButton_Click(sender As Object, e As EventArgs) Handles OkButton.Click 
Dim a(5) As String 
For i As Integer = 0 To 4 
    Dim anotherObj As TextBox = Me.Controls.Item("Textbox" & i) 
    a(i) =anotherObj.Text 
Next 
0

问题是动态控件在回发中丢失,所以当处理OkButton单击事件时,您的控件中没有任何内容。如果要检索文本框中的文本,则必须在回发中使用相同的ID重新创建控件。

使用你的代码,你需要做的就是回发确定文本框是否被创建,如果是,重新创建它们。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    ' Determine if the text boxes were created and if so, recreate them. 
    If CBool(ViewState("TextBoxesCreated")) Then 
     CreateTextBoxes() 
    End If 
End Sub 

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click 
    CreateTextBoxes() 
    ViewState("TextBoxesCreated") = True 
End Sub 

Private Sub CreateTextBoxes() 
    For i As Integer = 0 To 4 
     plchld.Controls.Add(New TextBox With {.ID = "TextBox" & i}) 
    Next 
End Sub 

Protected Sub OkButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles OkButton.Click 
    Dim a(4) As String 
    For i As Integer = 0 To 4 
     a(i) = CType(plchld.FindControl("Textbox" & i), TextBox).Text 
    Next 
End Sub 

我不知道你在做什么的全部程度,但我建议不要动态创建它们,如果你不需要。只需显示或隐藏文本框。

参考:http://www.codeproject.com/Articles/3684/Retaining-State-for-Dynamically-Created-Controls-i