sábado, 7 de noviembre de 2009

ASP.NET – Crear textbox dinamicamente - II

Parte I, Parte II.

postbackurl Luego que terminé la primera parte de este post, me hicieron varias preguntas interesantes, como por ejemplo: cómo paso los valores de estos textboxes generados dinámicamente a otra página?

Bueno pues, este post se ha creado para responder esa inquietud.

Para la página en donde se crearán los textboxes necesito el sgte código aspx:

<form id="form1" runat="server">
<
asp:Button ID="Button1" runat="server" Text="Generar textboxes" />
<
br />
<
asp:PlaceHolder ID="phDinamicControls" runat="server"></asp:PlaceHolder>
<
hr />
<
asp:Button ID="Button2" runat="server" Text="Enviar datos a otra página" PostBackUrl="~/WebForm2.aspx" />
</
form>

Luego, en el código beside, ponemos este código:

Private Property QuantityDinamicControls() As Integer
Get
If
ViewState("Quantity") = Nothing Then ViewState("Quantity") = 0

Return DirectCast(ViewState("Quantity"), Integer)

End Get
Set
(ByVal value As Integer)
ViewState("Quantity") = value
End Set
End Property

Protected Sub
Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click

Me.QuantityDinamicControls += 1

End Sub

Protected Overloads Overrides Sub
CreateChildControls()

If Page.IsPostBack Then GenerateControls()

End Sub

Private Sub
GenerateControls()

Dim Quantity As Integer = 0
While Quantity <= Me.QuantityDinamicControls
Dim txt As New TextBox()
txt.Attributes.Add("style", "margin-bottom: 10px")
txt.ID = "txt" + (Quantity + 1).ToString()
txt.Text = "Algún texto va aquí..."

phDinamicControls.Controls.Add(txt)
phDinamicControls.Controls.Add(New LiteralControl("<br/>"))
Quantity += 1
End While

End Sub

El cual, es casi el mismo que el post anterior, (por favor lean el post anterior).

La diferencia con el post anterior?

::en el código aspx añadí un botón con la propiedad PostBackUrl = “~/WebForm2.aspx”, lo cual me permitirá enviar los datos hacia la otra página.

Ahora, vamos a mostrar el código que va en la página WebForm2.aspx … para ver cómo se recepcionan los valores de los textboxes:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

Dim MyDynamicControls As New List(Of String)

For Each item As String In Request.Form.AllKeys
If item.Contains("txt") Then
MyDynamicControls.Add(Request.Params(item))
End If
Next

End Sub

Eso es todo, lo que hice fue crear una colección de strings, y allí guardo los datos que me interesan… en este caso los textboxes, por eso antes de guardarlos pregunto si comienzan con “txt”.

Simple no? ;)

4 comentarios:

jhinostrozac dijo...

Bueno, gracias por la ayuda ahora que lo veo de esta manera puedo extender el uso de los controles dropdownlist o cualquier otro.

Unknown dijo...

Muchas gracias por tu blog, asu, de vrdad es una gran ayuda para los programadores que diseñamos y desarrolamos en ASP.Net... Lo máxmo Johanna

Segundo Serrano dijo...

Gracias por tu comentario Johanna.

JorgeDiaz dijo...

muy pero muy buen aporte, estuve probando con ajax y me origina un problema ya que no seja los textboxes uno tras otro, sino q borra el que creó ultimo y luego crea el siguiente. no entiendo bien la logica de porque pasa esto. pero probe con tu codigo y efectivametne funciona.