61 messaggi dal 25 settembre 2006
ciao a tutti, sto lavorando su una applicazione web con il .net 4 e ho in una pagina problemi a gestire una lista di checkbox creata a runtime.
in fase di caricamento pagina io creo la lista di checkbox in base ad un db

foreach (DataRow riga in dsGenerale.Tables["Informazioni"].Rows)
{
  CheckBox ctrlChk = new CheckBox();
  ctrlChk.ID = "chkInfo_" + riga.Field<int>("ID"); 
  TableCell tc1 = new TableCell();
  tc1.Controls.Add(ctrlChk);
  TableCell tc2 = new TableCell();
  tc2.Text = riga.Field<string>("Informazione"); 
  TableRow tr = new TableRow();
  tr.Cells.Add(tc1);
  tr.Cells.Add(tc2);

  tblInformazioni.Rows.Add(tr);
}


senza fare nulla di particolare quando attivo un checkbox e poi faccio un submit, mi ritrovo il checkbox ancora selezionato correttamente nella pagina di risposta (se stessa), quindi per fortuna non ho i problemi di stato che ho letto essere comuni in questi casi

il problema è però il seguente: nel caso in cui io selezioni una riga da una datagrid (non MS ma Componentart) scateno un postback e vado a caricare da db dei valori per vari campi della pagina, tra i quali sono compresi anche i checkbox runtime.
Osservando in debug vedo che la funzione di creazione dei checkbox viene caricata per prima nel Page_Load e poi successivamente viene chiamata la routine di gestione del caricamento da db, tuttavia questa routine non ha un reale effetto sui checkbox che rimangono tutti deselezionati.

// esplora la tabella informazioni runtime
foreach (TableRow tr in tblInformazioni.Rows)
{
  ((CheckBox)tr.Cells[0].Controls[0]).Checked = true;
  CheckBox chkBox = (CheckBox)tr.Cells[0].Controls[0];
  string idInfo = chkBox.ID.Substring(8);

  if (listaIR.Contains(idInfo))
    chkBox.Checked = true;
  else
    chkBox.Checked = false;
}
// perchè non funziona???


qualcuno ha un suggerimento? grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

Another ha scritto:

la funzione di creazione dei checkbox viene caricata per prima nel Page_Load

Il Page_Load è un evento che si verifica troppo tardi quando lavori con controlli creati dinamicamente. Devi ricrearli prima.

Se osservi il diagramma del ciclo di vita della pagina asp.net, noti che il ProcessPostData si verifica prima del PreLoad. E' in quell'occassione che lo stato delle checkbox viene recuperato e, se non erano già state create, quest'opportunità viene persa.

Prova a creare le checkbox nel Page_Init, ad esempio.

ciao
Modificato da BrightSoul il 30 luglio 2012 23.31 -

Enjoy learning and just keep making

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.