RobyG_08
25-11-2009, 15:28
Bo, sicuramente ci sarà una spiegazione a questo mio quesito, a me sembra di essere sconfinato nel paranormale...
Dunque, ho una prima pagina, Default.asxp, sulla quale ci sono due DropDown che fanno operare una scelta. Settate queste due si passa alla pagina successiva dove carico dei dati a video in base alla scelta precedente. Ora il primo punto è questo: carico una DataTable che crea le sue column leggendo un file XML. Quindi la struttura della tabella è dinamica, e cambia in base all'XML da leggere. Vista la necessità di un layout particolare, non voglio usare una DataGrid (o GridView) perchè non voglio leggere i dati in riga. Non posso nenache usare una DataList perchè la struttura è dinamica, quindi non so apriori come sarà il mio ItemTemplate. Ho quindi usato il metodo Page.DataBind(). Nel file aspx c'è un div dove visualizzerò i dati che richiama un metodo presente nel code behind:
<div id="divGrid" style="overflow:auto;">
<%# WriteGriglia() %>
</div>
Nel code behind ho il mio metodo WriteGriglia() che legge i dati, il template, impasta tutto e restituisce una stringa che altro non è che del codice html. QUindi chiamando il metodo Page.DataBind() viene renderizzato l'html che ho costruito.
Fin qui tutto bene (se c'è ancora qualcuno che sta leggendo).
Il problema è che io in queste righe di dati ho bisogno di un link che mi faccia visualizzare sulla stessa pagina una tabella di dettaglio del record. Quindi costruendo la stringa nel metodo WriteGriglia() html ad un certo punto scrivo:
html += "<td align='left'><a onClick=\"javascript:__doPostBack('MioPostback','" + r["INDEX"].ToString() + "');\"><b>CLICCA QUA</b></a>";
Effettivamente tutte le righe renderizzate hanno il "CLICCA QUA" che causa un postback sulla pagina. Nella load della pagina infine controllo che Request["__EVENTTARGET"] == "MioPostback", se è così, capisco che è stata cliccata una riga e rendo visibile una DataList (DataList1.Visible = true;) e faccio altre cose. Ecco se faccio diventare visibile la DataList, accade che magicamente finito il postback, viene rieseguito il metodo Page_Load della pagina prima, la Default.aspx!!!!
Se faccio altre operazioni ma non rendo visibile un controllo non lo fa, al contrario viene sempre scatenato il Page_Load della Default.aspx, non so davvero perchè!
Se qualcuno ha una spiegazione gliene sarei grato!
Dunque, ho una prima pagina, Default.asxp, sulla quale ci sono due DropDown che fanno operare una scelta. Settate queste due si passa alla pagina successiva dove carico dei dati a video in base alla scelta precedente. Ora il primo punto è questo: carico una DataTable che crea le sue column leggendo un file XML. Quindi la struttura della tabella è dinamica, e cambia in base all'XML da leggere. Vista la necessità di un layout particolare, non voglio usare una DataGrid (o GridView) perchè non voglio leggere i dati in riga. Non posso nenache usare una DataList perchè la struttura è dinamica, quindi non so apriori come sarà il mio ItemTemplate. Ho quindi usato il metodo Page.DataBind(). Nel file aspx c'è un div dove visualizzerò i dati che richiama un metodo presente nel code behind:
<div id="divGrid" style="overflow:auto;">
<%# WriteGriglia() %>
</div>
Nel code behind ho il mio metodo WriteGriglia() che legge i dati, il template, impasta tutto e restituisce una stringa che altro non è che del codice html. QUindi chiamando il metodo Page.DataBind() viene renderizzato l'html che ho costruito.
Fin qui tutto bene (se c'è ancora qualcuno che sta leggendo).
Il problema è che io in queste righe di dati ho bisogno di un link che mi faccia visualizzare sulla stessa pagina una tabella di dettaglio del record. Quindi costruendo la stringa nel metodo WriteGriglia() html ad un certo punto scrivo:
html += "<td align='left'><a onClick=\"javascript:__doPostBack('MioPostback','" + r["INDEX"].ToString() + "');\"><b>CLICCA QUA</b></a>";
Effettivamente tutte le righe renderizzate hanno il "CLICCA QUA" che causa un postback sulla pagina. Nella load della pagina infine controllo che Request["__EVENTTARGET"] == "MioPostback", se è così, capisco che è stata cliccata una riga e rendo visibile una DataList (DataList1.Visible = true;) e faccio altre cose. Ecco se faccio diventare visibile la DataList, accade che magicamente finito il postback, viene rieseguito il metodo Page_Load della pagina prima, la Default.aspx!!!!
Se faccio altre operazioni ma non rendo visibile un controllo non lo fa, al contrario viene sempre scatenato il Page_Load della Default.aspx, non so davvero perchè!
Se qualcuno ha una spiegazione gliene sarei grato!