none
Controles Dinamicos RRS feed

  • Pregunta

  • Saludos ASP.NET tengo un problema y es que estoy agregando controles dinamicamente dentro de un asp:Panel y no consigo recuperarlos haciendo un FindControl esto no encuentra los controles que yo he creado dinamicamente.

    Esta parte esta en un metodo que genera los controles dinamicos

    Dim miTextBox as TextBox = new TextBox

    Dim miLabel as Label = new Label

    miTextBox.ID = "txtOpcion"

    miLabel.ID = "lblOpcion"

    miPanel.Controls.Add(miTextBox)

    miPanel.Controls.Add(miLabel)

    En un metodo que recorre todos los controles que estan dentro del Panel tengo esto:

    Dim miText as New TextBox

    miText = CType(miPanel.FindControl("txtOpcion"), TextBox)



    Juan A. Reyes

    viernes, 17 de marzo de 2017 0:32

Respuestas

  • Hola, lo que puedes intentar a hacer es lo siguiente:

    1.- pulsar en el botón, generar los textboxes dinamicos y asignar una variable del viewstate que has pulsado el botón

    2.-en el load de la pagina verificar ese viewstate y según sea el valor generar o no los controles dinamicos


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    viernes, 17 de marzo de 2017 14:16
    Moderador

Todas las respuestas

  • Hola, 

    solo indicarte que cuando creas controles dinámicos debes crearlos en cada PostBack. En qué evento del ciclo de vida de la página estás creando dichos controles? Debería ser en el Init.

    saludo


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    viernes, 17 de marzo de 2017 7:41
    Moderador
  • Yo creo los controles a traves de un boton cuando preciono click 

    Juan A. Reyes

    viernes, 17 de marzo de 2017 11:13
  •  >>no consigo recuperarlos haciendo un FindControl

    y no vas a poder hacerlo proque los controels dinamicos deben ser recreados en cada post, poner la creacion de estos controles en el evento de un boton es incorrecto

    como veras lo dinamico se debe crear en el Init o Load de la pagina

    aconsejaria que evalues otra tecnica para estos controles, no se definirlo fijos pero ocultarlos antes ciertas condiciones pero definelos en el aspx para que sea simpel su acceso

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 17 de marzo de 2017 11:38
  • Hola, pero cuando vuelves a realizar un postback o algo esos controles dinámicos "se pierden" si no los vuelves a crear. Cuando haces el FindControl donde lo estás realizando? Puedes mostrarnos algo más de código?  Cómo: Crear dinámicamente controles en ASP.NET utilizando .NET Visual C#

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    viernes, 17 de marzo de 2017 11:40
    Moderador
  • Entiendo, lo que pasa es que la creacion obedece a cantidad de controles por ejemplo tengo un textbox donde le especifico la cantidad de controles y luego es que ejecuto el click para que se creen.

    Juan A. Reyes

    viernes, 17 de marzo de 2017 11:42
  • Hola, lo que puedes intentar a hacer es lo siguiente:

    1.- pulsar en el botón, generar los textboxes dinamicos y asignar una variable del viewstate que has pulsado el botón

    2.-en el load de la pagina verificar ese viewstate y según sea el valor generar o no los controles dinamicos


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    viernes, 17 de marzo de 2017 14:16
    Moderador
  • ok pero aconsejaria usar otra tecnica

    podrias definir un template por medio del control Repeater, entonces si se ingresar un valor N crear un origen de datos como se run datatable o List<> con N cantidad de items, para que al asignar estos al DataSource se creen tantos template como necesites

    lo bueno es que el repeater mantiene estado por lo que podras realizar un FindControl() sobre el Repeater para lcalizar los datos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 17 de marzo de 2017 15:59