Passaggio della pagina come parametro di una sub

sabato 14 giugno 2008 - 21.43

motogpdesmo16 Profilo | Senior Member

Salve a tutti,
avrei la necessità di valorizzare delle label presenti nell'ambito della mia pagina ad una sub che dovrebbe provvedere a valorizzare dinamicamente
il loro contenuto.
Come posso fare a passare l'intera pagina alla suddetta sub?? Ho provato con me.page ma non riesco ad accedere agli oggetti label così come a tutti gli altri
controlli (immagini, griglie, bottoni).
Visto che comunque la pagina è bella "pienotta" di altri oggetti ed effettivamente non sarebbe l'ideale passare l'intera pagina per poi lavorare solo sulle label
(che al massimo possono essere 22), ci sarebbero altre soluzioni migliori rispetto a quella che mi è venuta in mente??

Grazie anticipatamente per le eventuali risposte!

rossimarko Profilo | Guru

Ciao,

come hai specificato il parametro della sub? E' di tipo Page? Hai controllato se le variabili che fanno riferimento ai controlli sono pubbliche?
Altrimenti puoi provare ad utilizzare il metodo FindControl della pagina, se ad esempio hai una label che si chiama lblPippo usa la funzione
objMyPage.FindControl("lblPippo")

In alternativa puoi creare una collection di oggetti ed inserire in questa collection tutti i controlli che devi gestire. Alla tua funzione poi passerai solamente la collection. Se i controlli sono tutti label allora la collection potrà essere una collection di label. Con i generics sono molto semplici da creare: http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx

Marco

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

motogpdesmo16 Profilo | Senior Member

Ti ringrazio per l'interessamento innanzitutto.
Avrei bisogno di due chiarimenti se ti è possibile:

* SOLUZIONE 1 - Intera pagina: Avevo già provato a passare la mia pagina "oPage as Page" ma senza riuscire ad accedere alle singole label come ho spiegato nel post di apertura. Non ho ben capito questo passaggio della tua spiegazione: "le variabili che fanno riferimento ai controlli sono pubbliche? ". Pensavo che, passando la pagina, potevo puntare tranquillamente a oPage.label1, oPage.label2 ecc ecc.

* SOLUZIONE 2 - Collection di label: Tramite il link msdn che mi hai fornito riesco a valorizzare senza problemi la collection con la lista delle label. Il problema è che l'accesso al singolo elemento della collection sembra che possa avvenire solo mediante l'indice dell'elemento stesso. Capisci bene che con una pagina di (almeno) 22 label risulta un po' difficile identificarle.

Spero di essere stato chiaro

rossimarko Profilo | Guru

>* SOLUZIONE 1 - Intera pagina: Avevo già provato a passare la
>mia pagina "oPage as Page" ma senza riuscire ad accedere alle
>singole label come ho spiegato nel post di apertura. Non ho ben
>capito questo passaggio della tua spiegazione: "le variabili
>che fanno riferimento ai controlli sono pubbliche? ". Pensavo
>che, passando la pagina, potevo puntare tranquillamente a oPage.label1,
>oPage.label2 ecc ecc.

Il problema è appunto che tu stai passando una variabile di tipo Page. La classe page non contiene nessun controllo all'interno perchè è una classe che rappresenta una pagina generica. Se vai nel file che contiene il codice della tua pagina vedrai che nell'intestazione della classe avrai una definizione del tipo:
public partial class Pagina2 : System.Web.UI.Page

Ovvero una classe Pagina2 (nel tuo caso sarà il nome che hai dato alla tua pagina) che eredita da Page. I controlli non sono definiti dentro a Page, ma dentro alla classe Pagina2. L'unico problema è che il designer crea i controlli protected (http://msdn.microsoft.com/en-us/library/bcd5672a.aspx) quindi non sono visibili pubblicamente. Se la tua funzione è in una classe a parte non potrà accedervi, a meno ché tu non esponga questi controlli con delle property public.
L'alternativa come ti dicevo è utilizzare il metodo FindControl (lo puoi usare anche sulla classe page): http://msdn.microsoft.com/en-us/library/31hxzsdw.aspx

>* SOLUZIONE 2 - Collection di label: Tramite il link msdn che
>mi hai fornito riesco a valorizzare senza problemi la collection
>con la lista delle label. Il problema è che l'accesso al singolo
>elemento della collection sembra che possa avvenire solo mediante
>l'indice dell'elemento stesso. Capisci bene che con una pagina
>di (almeno) 22 label risulta un po' difficile identificarle.

Se devi puntare ai tuoi controlli mediante una stringa, invece che un indice numerico, utilizza la dictionary specificando la chiave di tipo string: http://msdn.microsoft.com/en-us/library/xfhwa508.aspx
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

motogpdesmo16 Profilo | Senior Member

Seguendo la seconda soluzione, come parametro della sub ho passato

ByVal oColl As System.Collections.Generic.Dictionary(Of String, String)

e, nella pagina chiamante, ho dichiarato

Dim labels As New Dictionary(Of String, String)

per effettuare l'accesso all'oggetto, seguendo il link msdn microsoft che mi hai fornito, ho visto che si opera in questa maniera:

oColl.Item("label1")

N.b.: La stringa "Label1" poi nella mia sub è sostituita da una variabile sempre di tipo string

Ma non mi viene esposta alcuna proprietà da poter valorizzare (ad esempio, quella che più mi occorrerebbe, la proprietà ".text").
Dove sto sbagliando??
Grazie

rossimarko Profilo | Guru

>Ma non mi viene esposta alcuna proprietà da poter valorizzare
>(ad esempio, quella che più mi occorrerebbe, la proprietà ".text").
>Dove sto sbagliando??
>Grazie
>

Il problema è che hai dichiarato la collection di tipo stringa con una chiave stringa. Invece devi dichiararla di tipo Label con una chiave di tipo stringa.
Ovvero:
ByVal oColl As System.Collections.Generic.Dictionary(Of String, Label)

Dopo puntando ad un item della collection avrai tutte le proprietà degli oggetti label

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

motogpdesmo16 Profilo | Senior Member

perfetto.
Ti ringrazio del chiarimento. Non so veramente come ringraziarti della disponibilità e della chiarezza espositiva.
Grazie e a buon rendere.
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