Creazione dinamica dei controlli ?

giovedì 01 luglio 2010 - 12.26

skraus Profilo | Junior Member

Salve a tutti.

Ho un problema e non so quale possa essere la strada migliore per andare avanti. Ho realizzato una pagina aspx per fare l'insert di un'anagrafica di un cliente.

Nella pagina ho inserito un FormView e all'interno dell'InsertTemplate, essendo l'anagrafica articolata, ho inserito un MultiView con al suo interno 3 View.

In una TextBox contenuta nella prima View, chi compila, deve indicare il numero di prodotti (a due cifre) che devono essere associati all'anagrafica stessa. Nella seconda View, in cui ho opportunamente recuperato l'entità del numero di articoli, ho esigenza di mostrare all'utente un paritetico numero di Label e TextBox per potergli permettere di inserire i codici dei singoli articoli.

Istintivamente mi è venuto in mente la creazione dinamica dei controlli, ma mi sono reso conto che la strada è particolarmente accidentata.

Nel leggere altri post di questo forum, su problematiche simili, si consiglia l'uso di un repeater. Come faccio a dindarlo con il valore di una variabile ?

Grazie a tutti, ciao
Sk

Gluck74 Profilo | Guru

non so quanto ne valga la pena.
comunque,
Per passare e/o leggere i dati con il Repeater, ti devi comunque creare o una datatable, o una collection dei dati, ad esempio List<Articolo> dove Articolo è una tua classe.

ad esempio se nella prima pagina del multiview viene scritto 3, fai un for che crea tre volte un obj di tipo "Articolo" e l'aggiunge alla List, poi dai la list come DataSource al repeater.
Poi dipende anche da cosa devi memorizzare nella pagina successiva, se ti serve in effetti SOLO un codice, ancora meglio fai una semplice lista di valori e non ti serve nemmeno la classe

Dovresti riuscire senza problemi.
Ciao



____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

andrestu Profilo | Expert

scusa ma non puoi usare una listview, e magari utilizzare al suo interno i template customizzati, così gestisci il tutto a modo tuo...

Gluck74 Profilo | Guru

non c'è molta differenza utilizzando la listview. Per mia opinione credo sia più facile con il repeater

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

andrestu Profilo | Expert

guarda io il repeater praticamente non lho mai utilizzato quindi non ti sò dire più di tanto, l'unica cosa è che se non ricordo male, il listview dovrebbe essere il "successore" del repeatere e quindi meglio inglobato con la nuova struttura di Aspnet.

Gluck74 Profilo | Guru

riguardando bene.......
è verissimo quello che dici andrestu: meglio il ListView

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

andrestu Profilo | Expert

si infatti se non sbaglio il listview si integra pinamente con i controlli tipo sqldatasource invece con il repeater è un pò più macchinosa la questione, devi gestire manualmente le operazioni di binding se non ricordo male...

skraus Profilo | Junior Member

L'applicazione è sviluppata con asp.net 2.0, il listView non è stato introdotto con il 3.5 ?

Grazie
Sk

Gluck74 Profilo | Guru

Si, il ListView è un nuovo controllo introdotto con la versone 3.5.

Quindi dovrai utilizzare o il repeater o il dataList

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

skraus Profilo | Junior Member

Ho utilizzato il repeater. Però quando l'utente si muove avanti ed indietro sulle view della pagina, i valori degli altri controlli (TextBox) vengono riletti dal ViewState, mentre le TextBox contenute nel repeater appaiono vuote. Come posso ovviare a ciò ?

Ciao, Grazie.
Sk

Gluck74 Profilo | Guru

come carichi i dati nel Repeater??? Sul Page_Load o su un evento del MultiView?
Così su due piedi non ricordo bene, ma credo che il multiView abbia gli eventi che ti indicano lo spostamento da una pagina all'altra.
probabilmente il Repeater non ha una memorizzazione dei dati al tuo interno, quindi li devi ricaricare.
Per fare questo ti suggerisco di salvare un array all'interno della Session o del Profile, con i dati inseriti nel repeaer.

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

andrestu Profilo | Expert

non vorrei dirti una cavolata ma (se non lo stai già facendo) prova a gestire i dati tramite un dataset, indicare al repeater (tramite la proprietà datasource o qualcosa di simile) che la sorgente dei dati è il dataset che usi (o direttamente il datatable) e fai fare il bind al repeater ad ogni postback, in questo caso specifico o nell'evento del controllo che fa andare la pagina in avanti o in quello del repeater preposto allo spostamento della pagina, ora non ricordo bene... Comunque ti conviene andare a leggere qualcosa sul MSDN
pensa che tutti sti "casini" te li potresti evitare usando un sqldatasource e una listview
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