Controllo checked checkbox dinamiche

martedì 24 marzo 2009 - 13.33

valerik Profilo | Junior Member

Ciao a tutti,
ho cercato all'interno del forum, ,a non sono riuscito a venirne a capo.
Io mi creo dinamicamentedelle checbox nell Page_Load.
Poi vorrei intercettare al click di un pulsante se sono state checkate o no.
Come devo fare?
Ho provato in questo modo, ma senza risultato:

protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { readModuleXML(); } } public void readModuleXML() { string modulo = ""; XmlDocument docXML = new XmlDocument(); docXML.Load(Server.MapPath("../module.xml")); XmlNodeList directory = docXML.GetElementsByTagName("titolo"); for (int i = 0; i <= 2; i++) { modulo = directory[i].InnerXml; CheckBox chk = new CheckBox(); chk.Text = modulo; chk.ID = "chk" + i; pnl1.Controls.Add(chk); if (IsPostBack) { CheckBox cb0 = (CheckBox)FindControl("chk" + i); if (cb0.Checked) { Response.Write("ok<br />"); } } } } protected void btnExec_Click(object sender, EventArgs e) { readModuleXML(); }

Grazie
valerik

Anonimo Profilo | Senior Member

Ho corretto il tuo codice così dovrebbe funzionare:

protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) readModuleXML(); } public void readModuleXML() { string modulo = ""; XmlDocument docXML = new XmlDocument(); docXML.Load(Server.MapPath("../module.xml")); XmlNodeList directory = docXML.GetElementsByTagName("titolo"); for (int i = 0; i <= 2; i++) { modulo = directory[i].InnerXml; CheckBox chk = new CheckBox(); chk.Text = modulo; chk.ID = "chk" + i; pnl1.Controls.Add(chk); } } protected void btnExec_Click(object sender, EventArgs e) { foreach (Control c in Page.Forms.Controls) if (c is Checkbox) { CheckBox chk = (CheckBox)c; //fai quello che ti pare } }


valerik Profilo | Junior Member

In realta' non entra nell '
if (c is CheckBox) {
E' come se non trovasse nessuna checkbox.
allora ho provato a richiamare la funzione che le crea, ma niete lo stesso
Come mai?
valerik

Anonimo Profilo | Senior Member

ma tu le checkbox le vedi?

valerik Profilo | Junior Member

si, si, vengono visualizzate correttamente
valerik

Anonimo Profilo | Senior Member

Ah ok allora dovrebbe bastar questo:

protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) readModuleXML(); } public void readModuleXML() { string modulo = ""; XmlDocument docXML = new XmlDocument(); docXML.Load(Server.MapPath("../module.xml")); XmlNodeList directory = docXML.GetElementsByTagName("titolo"); for (int i = 0; i <= 2; i++) { modulo = directory[i].InnerXml; CheckBox chk = new CheckBox(); chk.Text = modulo; chk.ID = "chk" + i; pnl1.Controls.Add(chk); } } protected void btnExec_Click(object sender, EventArgs e) { foreach (Control c in pnl1.Controls) if (c is Checkbox) { CheckBox chk = (CheckBox)c; //fai quello che ti pare } }

valerik Profilo | Junior Member

Purtroppo non va ancora.
Evidentemente al momento del click, le checkbox non esistono piu', perche in effetti se metto cosi':
protected void btnExec_Click(object sender, EventArgs e) { readModuleXML(); foreach (Control c in pnl1.Controls) if (c is CheckBox) { CheckBox chk = (CheckBox)c; Response.Write("ok"); } }
funziona, anche se pero' perdo il controllo delle checkbox checkate, visto che sono state create di nuovo.
Mah, mi sfugge qualcosa.
Altri suggerimenti
valerik

Anonimo Profilo | Senior Member

Ok ci sono ho dovuto verificare con una prova, quindi scusa l'attesa, allora nella pagina aspx ho cambiato un po' così:

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

Nella pagina del codice cs ho scritto:

protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { DataSet ds = new DataSet(); ds.ReadXml(Server.MapPath("~/test.xml")); Session["nomeColonna"] = ds.Tables[0].Columns[0].ColumnName; griglia.DataSource = ds.Tables[0]; griglia.DataBind(); } } protected void Invio_Click(object sender, EventArgs e) { foreach (GridViewRow gvr in griglia.Rows) { if (gvr.Cells[0].Controls[1] is CheckBox) { CheckBox chk = (CheckBox)gvr.Cells[0].Controls[1]; //fai quello che ti pare } } }

e funziona hai il pieno controllo su tutto.

paoval72 Profilo | Senior Member

Ciao. ma quando scrivi:
>Poi vorrei intercettare al click di un pulsante se sono state
>checkate o no

Intendi dire che prima del click sul button potresti avere modificato qualche check?

PV

Anonimo Profilo | Senior Member

Ciao Paolino spacca tutto, come ti sembra la mia soluzione secondo me risolve il suo problema.

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