30 messaggi dal 30 maggio 2008
Salve a tutti.
Avrei bisogno di un vostro aiuto: vi illustro il problema.

Ho una collezione di dati che vorrei venisse visualizzata a video. La collezione è di questo tipo:

Collezione1
NomeDato11
ValoreDato11
NomeDato12
ValoreDato12

Collezione2
NomeDato21
ValoreDato21
Etc…

Ho una web application che chiama un controllo custom chiamato PannelloPadre.cs
PannelloPadre eredita da Panel (voglio che sia, appunto, un pannello).

Ho poi 3 custom controls che ereditano proprio da PannelloPadre (sono 3 perché rispecchiamo 3 diverse rappresentazioni della collection di cui sopra).
Ciascun elemento della collection vorrei renderizzarlo (nel Panel, appunto) con, ad esempio, 2 label: “Nome” e “Valore”.
Nel PannelloPadre definisco un PlaceHolder che poi andrà “riempito” con le coppie “Nome”-“Valore” di ciascun controllo.

Il problema è che ogni volta che do in pasto al PannelloPadre (che, a seconda del “tipo” di collection richiama un metodo di uno dei 3 controlli) la collezione, esso “sovrascrive” di volta in volta la proprietà Text delle mie label, facendomi vedere solo l’ultima scritta.

Questo è un frammento del codice del Controllo1.cs:

public SimpleCollection(SimpleCollection simpleCollection)
            : base(simpleCollection)
        {
            _lblDataName = new Label();
            _lblDataName.Text = simpleCollection.DsDato;

            _lblDataValue = new Label();
            _lblDataValue.Text = simpleCollection.Value.ToString();
        }
Nell’OnInit():
protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            //Aggiungo le label al PlaceHolder
            this.Placeholder.Controls.Add(_lblDataValue);
            
        }


Dove il PlaceHolder è definito a livello di classe padre (PannelloPadre).
Il Pannello padre è così definito:

public PannelloPadre(CollectionType collectionType)
        {
            this._collectionType = collectionType;            

            if (collectionType is SimpleCollection)
            {
                _placeholder = new PlaceHolder();
            }
  }


L’OnInit():

protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            // In base al tipo di CollectionType determino quali controlli vanno aggiunti
            // al panel

            switch (_tipoCollectionType)
            {
                case TipoCollectionType.SimpleCollection:
                    this.Controls.Add(_placeholder);
                    break;
[…]
            }
        }


Mi fate capire il perché sovrascrivo sempre il valore della Label mentre vorrei tante label quante sono le coppie?
Qualcuno mi può indirizzare?

Grazie mille!
liveforever wrote:
Mi fate capire il perché sovrascrivo sempre il valore della Label mentre vorrei tante label quante sono le coppie?
Qualcuno mi può indirizzare?

perchè tu in SimpleCollection anzichè creare una collection di Label ne crei soltanto una. non ho capito esattamente cosa vuoi fare con questo codice, ma di sicuro non vedo da nessuna parte collection di controlli, quindi è normale che vedrai una sola label con l'ultimo valore.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.