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

Acceso a Controles del PlaceHolder

Estas en el tema de Acceso a Controles del PlaceHolder en el foro de .NET en Foros del Web. Hola, He creado un control de usuario que no es mas que un conjunto de controles webforms del tipo asp:textbox ,asp:label ... Tengo una página ...
  #1 (permalink)  
Antiguo 07/10/2004, 03:02
Avatar de Devil Akuma  
Fecha de Ingreso: mayo-2004
Mensajes: 104
Antigüedad: 20 años
Puntos: 0
Acceso a Controles del PlaceHolder

Hola,
He creado un control de usuario que no es mas que un conjunto de controles webforms del tipo asp:textbox ,asp:label ...

Tengo una página con placeholders y en tiempo de ejecución voy insertando en cada uno de ellos un objeto de usuario (PlaceHolder.Controls.Add(...))

Esto no me da problemas, el problema viene cuando posteriormente intento acceder al contenido del placeHolder.
Con Me.FindControl("PlaceHolder") llego hasta el placeholder, pero cuando voy a acceder a sus controles encuentro que esta vacio .

No tengo forma de acceder a un asp:textbox que esta dentro de un placeholder.

Agradecería que alguien me pudiese dar alguna pista.

Gracias
__________________
CINeol has you...
  #2 (permalink)  
Antiguo 07/10/2004, 04:02
Avatar de luiscl  
Fecha de Ingreso: abril-2004
Ubicación: Zaragoza
Mensajes: 305
Antigüedad: 20 años
Puntos: 0
Devil, si no te importa pon el código completo en el que guardas los controles, y en el que los intentas recuperar, a ver si vemos el error.
__________________
Pide lo que quieras...y luego paga por ello
  #3 (permalink)  
Antiguo 07/10/2004, 04:17
Avatar de Devil Akuma  
Fecha de Ingreso: mayo-2004
Mensajes: 104
Antigüedad: 20 años
Puntos: 0
Pongo un ejemplo resumido ya que mi código esta dentro de un for con arrays.
Para comprenderlo mejor lo pongo mas sencillo

Definicion del control de usuario:
Código:
<%@ Control Language="vb" AutoEventWireup="false" Codebehind="uc_dcTextBox.ascx.vb" Inherits="Web.uc_dcTextBox" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<TR>
	<TD class="labelTD" style="HEIGHT: 24px" align="right" width="15%" nowrap>
		<asp:label id="CHeader" Runat="server"></asp:label>
		<asp:TextBox id="Codigo" Runat="server" enabled="False" Width="0px"></asp:TextBox>
	</TD>
	<TD class="dataTD" style="HEIGHT: 24px">
		<asp:TextBox id="CField" Runat="server" maxlength="3" columns="3"></asp:TextBox>
		<asp:CompareValidator id="CValidator" runat="server" Display="Dynamic" ControlToValidate="CField" Type="Integer"
			Operator="DataTypeCheck" ErrorMessage="Valor numérico"></asp:CompareValidator>
	</TD>
	<TD class="labelTD" style="HEIGHT: 24px" width="30%" nowrap>
		<asp:label id="CHelp" Runat="server"></asp:label>
	</TD>
</TR>

en la página aspx tengo definido
Código:
<%@ Reference Control="modules/uc_dcTextBox.ascx" %>
Dentro del código vb.aspx de la página inserto el objeto dinámicamente de la forma

Código:
...
Dim ph As PlaceHolder
...
 iuo_dcUC = CType(Page.LoadControl("modules/uc_dcTextBox.ascx"), uc_dcTextBox)
                           
                ph = CType(Page.FindControl("uc0"), PlaceHolder)
                If Not IsNothing(ph) Then ph.Controls.Add(iuo_dcUC)
Todo esto aparentemente funciona bien (Veo lo que inserto en la página)
El problema viene cuando intento acceder posteriormente al contenido del placeholder

Código:
 
...
Dim luo_PH As New System.Web.UI.WebControls.PlaceHolder
Dim luo_Text As New System.Web.UI.WebControls.TextBox
...
luo_PH = CType(Me.FindControl("uc0"), System.Web.UI.WebControls.PlaceHolder)
luo_Text = CType(luo_PH.FindControl("CField"), System.Web.UI.WebControls.TextBox)
...
[/code]

luo_PH contiene la referencia al PlaceHolder con valores pero el atributo control me aparece vacio de forma que al intentar acceder al textbox el objeto es nulo.

Lo siento por el rollo pero quiza así se entienda mejor.

Un saludo y gracias.
__________________
CINeol has you...
  #4 (permalink)  
Antiguo 07/10/2004, 05:15
Avatar de luiscl  
Fecha de Ingreso: abril-2004
Ubicación: Zaragoza
Mensajes: 305
Antigüedad: 20 años
Puntos: 0
Hola Devil.

Igual no es esto lo que estás preguntando, pero si lo que quieres es guadar el valor del textbox CField en luo_text, sería así.

luo_Text.text = Ctype(luo_PH.FindControl("CField"), System.Web.UI.WebControls.Textbox).text

Al menos es lo que utilizo yo para, por ejemplo, recuperar el valor de los textbox en una determinada columna del datagrid.

Si no es esto lo que intentas, que veo probable que me equivoque, dime y sigo echando un ojo.

Un saludo.
__________________
Pide lo que quieras...y luego paga por ello
  #5 (permalink)  
Antiguo 07/10/2004, 05:27
Avatar de Devil Akuma  
Fecha de Ingreso: mayo-2004
Mensajes: 104
Antigüedad: 20 años
Puntos: 0
Hola

Sí, que es lo que quiero hacer.

El problema es que la variable luo_Text (si miras mi código) contiene nothing, con lo cual ya no puedo acceder a su propiedad .text.

Es como si el contenedor de controles del placeholder estuviese vacio.

Saludos
__________________
CINeol has you...
  #6 (permalink)  
Antiguo 07/10/2004, 08:54
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Solo recuerda que si tienes un ascx automaticamente contendrá un conjunto de controles y si deseas accesar a ellos tienes que hacer un barrido..

Supongamos que tienes un ascx con 2 textbox y la label.

En tu página aspx cargas dinámicamente tu ascx en un placeholder..(recuerda tambien declararlo )

Cita:
Protected WithEvents wuc1 As WebUserControl1
...
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
..
...
wuc1 = Page.LoadControl("WebUserControl1.ascx")
ph.Controls.Add(wuc1)...
...
End Sub
Y en tu misma página aspx tienes un boton para ver el ó los controles de tu ascx...

Tendrías algo como ésto:

Cita:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
For Each c As Control In wuc1.Controls
Response.Write(c.GetType().Name & "<br>")
Next
End Sub
Con ello obtienes todos los controles dentro de tu webusercontrol que a su vez está dentro de un placeholder.

P.D.- Ya dependería de ti hacer los castings correspondientes para tu texbox, label..etc..

SAlu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #7 (permalink)  
Antiguo 08/10/2004, 09:36
Avatar de Devil Akuma  
Fecha de Ingreso: mayo-2004
Mensajes: 104
Antigüedad: 20 años
Puntos: 0
Gracias por todo. Ya he encontrado la solución!

Cuando se insertan controles dinámicos en una página (sena del tipo que sean) es necesario redibujarlos cada vez que se dispara el Pageload de la página. Cuando se insertan controles de forma estática el código que se encarga de repintarlos lo genera automáticamente .NET (Código generado por el diseñador de WebForms inizialice components()) En cambio, como ya he dicho, los dinámicos se tienen que repintar de forma manual.

El mantenimiento del valor de los campos si que se gestiona de forma automática a través del ViewState y por tanto :) no nos tenemos que preocupar de eso.

Un saludo
__________________
CINeol has you...
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 14:22.