Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Conteggio elementi dentro un panel
giovedì 26 febbraio 2015 - 10.46
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
C#
|
.NET 4.0
|
Windows 7
paolo973
Profilo
| Senior Member
302
messaggi | Data Invio:
gio 26 feb 2015 - 10:46
Ciao a tutti,
<asp:Panel ID="Panel1" runat="server" Width="100%"></asp:Panel>
aggiungo in un panel un numero variabile di checkbox, usando queste linee di codice
e fin quì funziona:
for (...)
{
CheckBox cb = new CheckBox();
cb.ID = "cb" + i.ToString();
cb.Checked = true;
cb.ToolTip = "cb" + i.ToString();;
Panel1.Controls.Add(cb);
}
dopo, quando però desidero sapere quanti elementi ci stanno in Panel1,
LabelOut.Text = Panel1.Controls.Count.ToString();
mi ritorna sempre 0.
Cosa mi sfugge?
sboss83
Profilo
| Newbie
39
messaggi | Data Invio:
gio 26 feb 2015 - 11:05
Scusa ma la richiesto di conteggio dei controlli dove la metti ?
Con il tuo codice io li recupero in maniera corretta.
Stefano
paolo973
Profilo
| Senior Member
302
messaggi | Data Invio:
gio 26 feb 2015 - 11:08
in un button
sboss83
Profilo
| Newbie
39
messaggi | Data Invio:
gio 26 feb 2015 - 11:14
Chiedo scusa ma mi sono espresso male.
Volvo capire a che punto vengono generati i controlli e in funzione di quello ipotizzare che tu leggessi il numero dei controlli prima che questi vengano generati ( da qui il risultato 0)
Stefano
paolo973
Profilo
| Senior Member
302
messaggi | Data Invio:
gio 26 feb 2015 - 11:34
il panel1 lo riempio con un button1
il conteggio lo eseguo con il button2
spero di avere capito
sboss83
Profilo
| Newbie
39
messaggi | Data Invio:
gio 26 feb 2015 - 11:49
Scusa la banalità della risposta, ma non puoi contare i controlli subito dopo averli creati ?
Se schiacci un altro bottone per il conteggio, i controlli non verranno ricreati quindi in effetti, di controlli, ce ne saranno 0.
Stefano
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
gio 26 feb 2015 - 20:45
si infatti con questa logica avrai sempre zero perchè quando fai il postback i controlli non vengono ricreati e se continui a vederli potrebbe essere che utilizzi panel differenti ...
bisogna capire meglio cosa devi fare
Andrea Restucci - Web Developer
paolo973
Profilo
| Senior Member
302
messaggi | Data Invio:
ven 27 feb 2015 - 09:52
ok ora li conta ma conta tutto, come è giusto che sia.
Nel Panel oltre ad oggetti di tipo CheckBox ci stanno
anche textbox e image.
come posso contare ed individuare solo oggetti CheckBox ?
con questo codice:
foreach (CheckBox c in Panel1.Controls)
if (c.Checked)
{
...
}
ottengo questo errore:
Impossibile eseguire il cast di oggetti di tipo 'System.Web.UI.WebControls.Image' sul tipo 'System.Web.UI.WebControls.CheckBox'.
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
ven 27 feb 2015 - 10:08
int totale = Panel1.Controls.Cast<Control>().Where(C => C is CheckBox).Count();
paolo973
Profilo
| Senior Member
302
messaggi | Data Invio:
ven 27 feb 2015 - 10:35
ok
ma ora sovviene un dubbio, scusa ma sono di coccio:
ho il panel1 vuoto
con il button1, al suo click, riempio il panel1 con vari label, image e checkbox.
con button2 , ad un suo click, posso contare ad esempio quanti checkbox ci stanno dentro panel1 che è stato precedentemente riempito dal click su button1?
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
ven 27 feb 2015 - 11:34
allora considera che i controlli ad ogni postback devono essere creati, invece le proprietà dei controlli le puoi valorizzare anche solo al primo postback che tanto ci pensa il viewstate a mantenerle, senti spiegami meglio cosa devi fare così riesco a darti qualche suggerimento...
se vuoi implementare una pagina dove inserisci dei controlli dinamici al buttonclick allora devi crearti una logica personalizzata
domanda : questi controlli che crei dinamicamente devono essere controlli aspnet oppure anche solo semplice render html?
se sono controlli aspnet (cioè tag con impostato runat="server") e devono mantenere i valori delle proprietà bisogna inserirli o nell'evento Init o Load (pernso anche Load va bene) quindi prima di tali eventi tu devi avere già impostato il numero e il tipo di controlli da inserire
l'evento buttonclick viene chiamato dopo l'evento Load, potresti anche inserirli subito dopo questo evento (LoadComplete evento pagina) però non sono sicuro che in tal caso i controlli inseriti mantengono correttamente il viewstate (cioè i valori delle proprietà che cambiano)
ad esempio potresti crearti in Session degli oggetti specifici che mantengono il numero e tipo di controlli creati dinamicamente e leggere nell'evento LoadComplete questi dati e creare i controlli da inserire nella pagina
se però hai il problema che poi non ti mantengono correttamente il viewstate devi anticipare questo caricamento all'avento Load, e in tal caso non potrai più usare il buttonclick per inviare i dati ma dovrai usare metodi alternativi
https://msdn.microsoft.com/en-us/library/ms178472(v=vs.100).aspx
Andrea Restucci - Web Developer
Torna su
Stanze Forum
Elenco Threads
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 !