Riempire delle label attraverso un array

domenica 24 febbraio 2008 - 21.12

bluland Profilo | Guru

Salve,

ho creato sul webform una serie di label il cui id è il seguente:

label1
label2
label3

Poi ho un array di valori con cui vorrei riempire il .text delle label

ho pensato che fosse possibile fare in questo modo

for i= 0 to 2

label(i).text = array.GetValue(i)


next

ma non funziona, come si fa idee?


saluti
--------------------
Vincenzo PESANTE
System Engineer

alx_81 Profilo | Guru

>Salve,
Ciao!

>ho creato sul webform una serie di label il cui id è il seguente:
>Poi ho un array di valori con cui vorrei riempire il .text delle label
>
>come si fa idee?
Per scorrere le label che sono all'interno di una webform, puoi usare la collection Controls dell'oggetto Page:

Ipotizziamo il seguente HTML:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Non utilizzo un array, bensì un dictionary (Page_Load):

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load ' dizionario dei valori Dim dicValues As New System.Collections.Generic.Dictionary(Of String, String) ' riempio il dizionario dei valori dicValues.Add("label0", "Zero") dicValues.Add("label1", "Uno") dicValues.Add("label2", "Due") dicValues.Add("label3", "Tre") dicValues.Add("label4", "Quattro") ' ciclo i controlli del primo livello della pagina all'interno del DIV For Each l As Control In Page.Controls(3).Controls ' se il controllo in questione è label controllo l'indice If TypeOf l Is Label Then ' se l'indice è contenuto nel dizionario imposto la proprietà text If dicValues.ContainsKey(l.ID) Then DirectCast(l, Label).Text = dicValues(l.ID) End If End If Next End Sub

Come puoi vedere ciclo la collection controls dell'oggetto FORM (che per me è in posizione 3 della Controls della Page). Controllo che il tipo sia Label ed in caso positivo prendo direttamente dal dictionary, se esiste, il valore corrispondente alla chiave (che è il nome della label, per comodità).


Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

bluland Profilo | Guru

Avevo pensatodi fare in questo modo:

Dim LabelArray(4) As Label

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here

If Not Page.IsPostBack Then


SetControlArray()
....

Sub SetControlArray()

'Fill labels for numeric rty value
LabelArray(0) = Me.Labperc1
LabelArray(1) = Me.Labperc2
LabelArray(2) = Me.Labperc3
LabelArray(3) = Me.Labperc4
LabelArray(4) = Me.Labperc5

end sub

Ciao
--------------------
Vincenzo PESANTE
System Engineer

freeteo Profilo | Guru

ciao Vincenzo,
non ho capito il motivo per cui cercavi una soluzione elegante, e poi hai fatto una soluzione "fissa da codice"

La soluzione si trova sempre, se vuoi qualcosa di efficace nel brevissimo termine allora la lista di valori letti dalle label dirette va benissimo, non serviva il post di prima.
Se invece, come credo di aver capito, volevi qualcosa di dinamico che se domani devi aggiungere un valore lo recuperi senza modificare il codice, allora devi pensare ad un codice come ti ha consigliato Alex, oppure ad uno come questo che ti consiglio io:

io cercherei tra i control, tutti quelli che hanno quel nome, costruendo il nome a stringa dinamica in un ciclo:

for(int i=0 ;i<this.Form.Controls.Count; i++) { Control controllo = this.Form.FindControl("Label" + i); if (controllo != null) { Label labelTrovata = controllo as Label; labelTrovata.Text = .... } }

chiaro che se invece devi fare presto, e non hai problemi di "dinamicita" va benissimo il tuo codice .
Io ritengo cmq che un po di codice agile sia la cosa migliore, sempre anche per avere padronanza con certe tecniche anche in futuro...

ps: il titolo dice una cosa, la soluzione tua altro...non capisco bene cosa vuoi fare...cmq il concetto è similare

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

bluland Profilo | Guru

>ciao Vincenzo,
>non ho capito il motivo per cui cercavi una soluzione elegante,
>e poi hai fatto una soluzione "fissa da codice"
>
>La soluzione si trova sempre, se vuoi qualcosa di efficace nel
>brevissimo termine allora la lista di valori letti dalle label
>dirette va benissimo, non serviva il post di prima.
>Se invece, come credo di aver capito, volevi qualcosa di dinamico
>che se domani devi aggiungere un valore lo recuperi senza modificare
>il codice, allora devi pensare ad un codice come ti ha consigliato
>Alex, oppure ad uno come questo che ti consiglio io:
>
>io cercherei tra i control, tutti quelli che hanno quel nome,
>costruendo il nome a stringa dinamica in un ciclo:
>
>
> for(int i=0 ;i<this.Form.Controls.Count; i++)
> {
>Control controllo = this.Form.FindControl("Label" + i);
> if (controllo != null)
> {
> Label labelTrovata = controllo as Label;
> labelTrovata.Text = ....
> }
> }
>
>
>chiaro che se invece devi fare presto, e non hai problemi di
>"dinamicita" va benissimo il tuo codice .
>Io ritengo cmq che un po di codice agile sia la cosa migliore,
>sempre anche per avere padronanza con certe tecniche anche in
>futuro...
>
>ps: il titolo dice una cosa, la soluzione tua altro...non capisco
>bene cosa vuoi fare...cmq il concetto è similare
>
>ciao.
>
>Matteo Raumer
>[MCAD .net]
>http://blogs.dotnethell.it/freeteo


Cerco di spiegare,

Le label che avrei carica andavano a costituire le celle di una tabella html,
ovviemente la versione che ho dato io dettata dalla fretta non permetteva una gestione dinamica, cosi dopo essermi reso conto di aver ancora tempo a disposizione e dato che di tabella si trattava mi sono detto:
"Ma ora uso un datagrid è cosi ho risolto in un modo completamente diverso"

Grazie delle vostre versione le prendo in considerazione (cut & paste) per futuri sviluppi

CIao
--------------------
Vincenzo PESANTE
System Engineer
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5