Newsgroup: it.comp.dotnet
Titolo: [C#] gridwiev selectedindexchanged vs rowdatabound

ciao a tutti,
 
ho bisogno di un aiuto per capire come gestire due gridview nella stessa 
pagina aspx.
 
ho in pratica un master e sul rowdatabound modifico il contenuto di una 
cella a seconda del valore del sottostante dataitem.
 
quando seleziono una riga nel master viene popolato il secondo gridview con 
il dettaglio, il dati compaiono correttamente ma il master perde la 
'personalizzazione' della cella fatta durante il rowdatabound.
 
a naso direi che il giro non fa una grinza, perche' il databind non 
dovrebbe avvenire quando seleziono una riga.
 
ma...
 
c'e' modo di gestire questa situazione mantenendo la personalizzazione 
della cella nel master?
 
 
grazie
 
Paolo
 
-- 
Paolo opg
 
BE AWARE that this post uses a fake reply-to address
to contact me write to:
janickg ( at ) hotmail ( dot ) com
--

 dovrebbe avvenire quando seleziono una riga.
 
Dipende: se stai usando sintassi dichiarativa (i template), e se il 
view-state e' abilitato, la griglia rimane popolata ai post-back, ma se il 
view-state e' disabilitato il data-bind va rifatto, altrimenti ti ritrovi 
una griglia vuota.  A complicare ulteriormente la cosa c'e' da considerare 
che se stai creando ed aggiungendo controlli dinamicamente, al post-back 
questi devono essere ripristinati altrimenti non ci sono piu' (che il 
view-state sia abilitato o meno), e dovrebbero essere ripristinati 
nell'Init, altrimenti il view-state anche se e' abilitato va perso...
 
Per maggiori dettagli, dovresti postare il proverbiale minimo codice che 
riproduce il problema.
 
-LV
 
 

 
 
la griglia rimane popolata con i dati corretti, perche' e' associata a una 
sqldatasource e il suo postback viene gestito correttamente.
 
la rogna e' una e una sola colonna che modifico sull'evento rowdatabound 
col codice di cui sopra: di default si tratta di una checkbox che io 
elimino e sostituisco con una immagine.
 
 
dopo un consulto con mister google ho deciso comunque di cambiare strada, 
perche' mi son reso conto di avere imboccato una strada inutilmente 
complicata.
 
nel mio caso in particolare non ho necessita' di un controllo, perche' devo 
visualizzare una informazione e non mi serve che l'utente interagisca con 
l'immagine che vado a inserire nella griglia.
 
ho risolto cosi':
 
protected void GV_RowDataBound(object sender, GridViewRowEventArgs e)
{
    	if (e.Row.RowType == DataControlRowType.DataRow)
	{
		string ImgSrc = Page.ResolveClientUrl("~/path/to/img");
    	    	string ImgAlt = "Tooltip";
		TableCell Cella = e.Row.Cells[7];
		Cella.Controls.Clear();
		Cella.Text = "<img src='" + ImgSrc + "' alt='" + ImgAlt + "'/>";
	}
}
 
in questo modo l'immagine persiste dopo il postback ^^
 
e' una soluzione 'soluzione' oppure e' un accrocchio?


 e' una soluzione 'soluzione' oppure e' un accrocchio?
 
Prima o poi con il life-cycle di pagina e controlli, e con le complicazioni 
dei controlli aggiunti dinamicamente, occorre farci i conti, e devo 
ammettere che non e' materia semplice: in fin dei conti, si riescono ad 
ottenere soluzioni pulite solo se i controlli in questione sono propriamente 
strutturati e incapsulati tanto per cominciare.
 
D'altra parte, IMHO, finche' si tratta di un caso relativamente isolato, la 
tua soluzione sarebbe anche accettabile.  Semmai mi viene in mente: sei 
sicuro che non te la caveresti con un semplice template di colonna? 
Qualcosa del tipo (scritto senza verificare la sintassi):
 
<asp:TemplateField SortExpression="Enabled" HeaderText="Enabled">
    <ItemTemplate><asp:Image runat="server" ImageUrl='<%# 
(bool)Eval("Enabled") ? "enabled.png" : "disabled.png" %>' /></ItemTemplate>
</asp:TemplateField>
 
Dalla binding syntax del template puoi anche invocare funzioni nel 
code-behind, e non solo...!
 
-LV
 
 

 
 
fatta qualche prova con i template, preferisco tenere il codice nel code 
behind per gestire i dbnull (che nel mio caso sono valori significativi) in 
maniera piu' semplice.
 
 
grazie per le dritte: hanno gia' trovato applicazione ^^


 maniera piu' semplice.
 
Visto che ci siamo: se una soluzione pulita era l'obiettivo, allora userei 
comunque il template e dal template chiamerei una qualunque funzione nel 
code-behind.  Eventi come il row-data-bound e' opportuno destinarli a lavori 
dinamici veramente, non alla semplice costruzione/formattazione di output 
statico.
 
-LV