Foros del Web » Programación para mayores de 30 ;) » .NET »

Recuperar valores de controles generados dinámicamente

Estas en el tema de Recuperar valores de controles generados dinámicamente en el foro de .NET en Foros del Web. Hola, muy buenas. A partir de un DataTable genero controles TextBox y los añado dinámicamente a la página. Los valores se cargan bien en todos ...
  #1 (permalink)  
Antiguo 27/06/2005, 04:50
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Recuperar valores de controles generados dinámicamente

Hola, muy buenas.

A partir de un DataTable genero controles TextBox y los añado dinámicamente a la página. Los valores se cargan bien en todos los controles pero al estar generados dinámicamente no consigo recuperar los textos modificados. Pongo el código para cargar los controles:

Código:
            Dim tabla As New Table
            With tabla
                .HorizontalAlign = HorizontalAlign.Center
                .CellSpacing = 15
            End With

            Dim controlesPreguntas(dtPreguntas.Rows.Count) As String
            Dim controlesOrden(dtPreguntas.Rows.Count) As String

            For i As Integer = 0 To dtPreguntas.Rows.Count - 1
                Dim fila As New TableRow
                Dim celdaOrden As New TableCell
                celdaOrden.VerticalAlign = VerticalAlign.Top
                Dim celdaPregunta As New TableCell
                celdaPregunta.VerticalAlign = VerticalAlign.Top

                Dim txtOrden As New TextBox
                With txtOrden
                    .Rows = 1
                    .Columns = 1
                    .MaxLength = 2
                    .Text = dtPreguntas.Rows(i).Item("orden")
                    .ID = "orden_" & i
                End With
                controlesOrden.SetValue(txtOrden.ClientID, i)
                celdaOrden.Controls.Add(txtOrden)
                fila.Cells.Add(celdaOrden)

                Dim txtPregunta As New TextBox
                With txtPregunta
                    .TextMode = TextBoxMode.MultiLine
                    .Rows = 3
                    .Columns = 100
                    .MaxLength = 600
                    .Text = dtPreguntas.Rows(i).Item("pregunta")
                    .ID = "pregunta_" & i
                End With
                celdaPregunta.Controls.Add(txtPregunta)
                fila.Cells.Add(celdaPregunta)

                tabla.Rows.Add(fila)
            Next

            Me.phPreguntas.Controls.Add(tabla)

            Session("numControles") = controlesOrden.Length
Y luego intento recuperar los nuevos valores así:

Código:
        Dim numControles As Integer = Session("numControles")
        Dim txtOrden As New TextBox
        Dim txtPregunta As New TextBox
        Dim i As Integer
        For i = 0 To numControles - 1
            txtOrden = FindControl("orden_" & i)
            Response.Write(txtOrden.Text)
        Next
Y la línea en rojo da el siguiente error: Object reference not set to an instance of an object.

¿Alguna idea?
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #2 (permalink)  
Antiguo 27/06/2005, 05:12
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Bueno, no era lo que pretendía pero al menos he conseguido resolverlo de esta sencillísima manera:

Código:
        Dim numControles As Integer = Session("numControles")
        Dim insOrden(numControles) As String
        Dim insPreguntas(numControles) As String
        Dim i As Integer
        For i = 0 To numControles - 1
            insOrden.SetValue(Request.Form("orden_" & i), i)
            insPreguntas.SetValue(Request.Form("pregunta_" & i), i)
        Next
Gracias y un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:59.