Richiamare un custom control

lunedì 29 settembre 2008 - 09.14

Simpz Profilo | Junior Member

Ciao a tutti,
ho un problema, dovrei richiamare un controllo da un altro controllo annidato nella stessa pagina aspx.
Mi spiego meglio.
Ho una pagina aspx che all'interno ha 2 custom controls, custom 1 e custom 2, vorrei errese in grado di settare un valore e richiamare una funzione del custom control 2 dal custom control 1.
Come posso fare?

Grazie a tutti

Simone

rossimarko Profilo | Guru

Ciao,

ti suggerisco un paio di soluzioni. La prima è impostare una proprietà nel custom control 1 che conterrà il riferimento al customcontrol 2. In questo modo poi potrai settare il valore della property all'interno della pagina e il controllo 1 potrà richiamare i metodi del controllo2.

In alternativa dal controllo 1 puoi effettuare un findControl sulla pagina e ricercare il controllo 2:
CustomControl2 ctrl2 = Page.FindControl("ctrl2") as CustomControl2;

Delle due a mio avviso la prima soluzione è più pulita
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Simpz Profilo | Junior Member

Ho optato per la 2° risoluzione che mi hai dato facendo così:
UserControl cc = (UserControl)Page.LoadControl("~/CustomControls/cc.ascx");

Solo che ora vorrei prendere i componenti della usercontrol che ho appena istanziato per settarli... come posso fare?

rossimarko Profilo | Guru

>Ho optato per la 2° risoluzione che mi hai dato facendo così:
>
>UserControl cc = (UserControl)Page.LoadControl("~/CustomControls/cc.ascx");
>

Ma il controllo nella pagina lo inserisci dinamicamente con la LoadControl oppure lo hai già inserito all'interno dell'aspx?

Perchè se è già stato inserito all'interno della pagina aspx basta il metodo FindControl..
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Simpz Profilo | Junior Member

No l'ho inserito all'interno della pagina aspx con questo tag in alto:
<%@ Register TagPrefix="custom" TagName="cc" Src="~/CustomControls/cc.ascx" %>
quindi nella pagina ascx devo solo fare un find control? tipo
CC cc = (CC)Page.FindControl("~/CustomControls/cc.ascx");

rossimarko Profilo | Guru

>CC cc = (CC)Page.FindControl("~/CustomControls/cc.ascx");

Si esatto. Se poi il riferimento al controllo esiste (!= null) puoi richiamare i suoi metodi

-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Simpz Profilo | Junior Member

sembra che il riferimento al controllo non esista... sbaglio qualcosa nella riga?

rossimarko Profilo | Guru

Scusami, non mi ero accorto che non hai inserito correttamente l'id del controllo. Come parametro della findcontrol (http://msdn.microsoft.com/en-us/library/486wc64h.aspx) non devi passare il path
>
CC cc = (CC)Page.FindControl("~/CustomControls/cc.ascx");

ma l'id del controllo che hai inserito sulla pagina

Quindi se nella pagina aspx hai:
<custom:cc id="ctrl1" runat="server" />

come parametro della find control devi passare ctrl1
CC cc = (CC)Page.FindControl("ctrl1");
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Simpz Profilo | Junior Member

un id che in fase di register nella pagina aspx non ho inserito... quindi, tu mi insegni che dovrei inserire...

Edit...
no no ho detto una cacchiata mò provo

Edit2...
Putroppo mi da null... come mai??? eppure se faccio il debugger e vado a sbirciare i vari attributi della Page la trovo con l'id giusto che ho messo nella find control... può essere un problema di visibilità?

Edit3...
non era page.findControl ma parent.findControl
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5