USER CONTROL

venerdì 26 settembre 2003 - 18.59

1234 Profilo | Newbie

Come si fa a leggere il contenuto di una user control (file .ascx) a partire da una Web form che lo implementa?

Esempio: file ascx contiene TextBox txtNome e txtCognome
nel file web form aspx aggiungo lo user control: come faccio a leggere il contenuto di txtNome?

Grazie per l'aiuto.

Admin Profilo | Junior Member

allora...

dalla web form, devi fare innanzitutto un Page.FindControl("iddellousercontrol"), per recuperare l'istanza dell'ascx, e quindi fare il cast del Control restituito da questa funzione, nel tipo del tuo controllo (cioè il nome della classe di code-behind dello user control).

[C#]
MyUserControl myAscx = (MyUserControl) Page.FindControl("idascx");

[VB.NET]
Dim myAscx as MyUserControl = DirectCast(Page.FindControl("idascx"), MyUserControl)

una volta che hai l'istanza del tuo usercontrol... puoi riferirti alle sue proprietà, e quindi, qualcosa del genere dovrebbe andare:

string myText = myAscx.txtNome.Text;

dove txtNome è l'istanza della textbox nello usercontrol. Ah... txtNome deve essere dichiarata come public nello usercontrol, o cmq in modo tale da essere visibile da classi esterne.

Spero di esser stato chiaro. In caso di dubbi, riscrivici.

Ciao

Stefano Giannone [MCP .NET]

1234 Profilo | Newbie

Grazie... riesco ad a raggiungere l'oggetto all'interno dello user control ma ora il problema è che non mi riconosce lo user control nel Web form... ecco il mio codice e il messaggio d'errore:

Premessa: user control = InputData.ascx, id dello user control all'interno della Web Form = InputData1, ho dichiarato public il campo txtInDescription, infatti riesco a raggiungere la sua proprietà Text:

InputData idata = (InputData) Page.FindControl(InputData1);
txtProva.Text = idata.txtInDescription.Text;

Messaggio errore: The name 'InputData1' does not exist in the class or namespace 'MioProgetto.WebForm1'

Devo per caso dichiarare l'oggetto nella parte di codice "Web form Designer generated code"? e come?
Grazie ancora

Admin Profilo | Junior Member

l'id dello usercontrol deve essere passato come stringa.

prova con:

InputData idata = (InputData) Page.FindControl("InputData1");
txtProva.Text = idata.txtInDescription.Text;

Ciao

Stefano Giannone [MCP .NET]

1234 Profilo | Newbie

Grazie 1000, ora funziona :)

PEPE Profilo | Senior Member

Salve,
mi rendo conto che il post sia vecchio ma cmq ho unaa piccola richiesta.
Vorrei sapere la teoria che sta dietro alla seguente istruzione

[VB.NET]
Dim myAscx as MyUserControl = DirectCast(Page.FindControl("idascx"), MyUserControl)

A che server il DirectCast ?
Cosa succede quando si fa Page.FindControl("idascx"), MyUserControl ?

Grazie,
Luca.

Brainkiller Profilo | Guru

E' più o meno simile al CType.
Serve per fare un casting, convertire un tipo ad un altro detto banalmente.

Il metodo FindControl ti ritorna se lo trova un generico riferimento ad un oggetto Control.
Se ciò che hai cercato però è un ComboBox per esempio, per poter usarlo al meglio devi usare un CType o un DirectCast per convertire il riferimento al tipo di dati corretto.

ciao
david
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5