Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[C#] gridwiev selectedindexchanged vs rowdatabound

20 views
Skip to first unread message

Paolo opg

unread,
Dec 22, 2011, 7:30:27 AM12/22/11
to
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
--

LudovicoVan

unread,
Dec 27, 2011, 8:26:44 AM12/27/11
to
"Paolo opg" <spamc...@tiscali.it> wrote in message
news:Xns9FC38967BCE92sp...@193.43.96.1...
> 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.

Cosa vuol dire che "modifichi" il contenuto della cella? Stai parlando di
un template oppure proprio crei e aggiungi controlli dinamicamente?

> 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.

Come sopra: di che "personalizzazione" si tratta?

> a naso direi che il giro non fa una grinza, perche' il databind non
> 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


Paolo opg

unread,
Jan 2, 2012, 10:19:54 AM1/2/12
to
"LudovicoVan" <ju...@diegidio.name> wrote in
news:jdch2r$jg3$1...@speranza.aioe.org:

> "Paolo opg" <spamc...@tiscali.it> wrote in message
> news:Xns9FC38967BCE92sp...@193.43.96.1...
>> 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.
>
> Cosa vuol dire che "modifichi" il contenuto della cella? Stai
> parlando di un template oppure proprio crei e aggiungi controlli
> dinamicamente?
>
[cut]

clear della cella, creo un nuovo oggetto e lo aggiungo alla collection dei
controlli della cella:

protected void GV_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Image Esito = new Image();
Esito.ImageUrl = "~/immagini/pin-orange.png";
Esito.ToolTip = "In attesa";
TableCell Cella = e.Row.Cells[7];
Cella.Controls.Clear();
Cella.Controls.Add(Esito);
}
}


>
>> a naso direi che il giro non fa una grinza, perche' il databind non
>> 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?

LudovicoVan

unread,
Jan 2, 2012, 11:28:41 AM1/2/12
to
"Paolo opg" <spamc...@tiscali.it> wrote in message
news:Xns9FCEA622A45FDsp...@193.43.96.1...

> 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


Paolo opg

unread,
Jan 3, 2012, 2:58:33 AM1/3/12
to
"LudovicoVan" <ju...@diegidio.name> wrote in
news:jdslvr$168$1...@speranza.aioe.org:

[cut]
> 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 ^^

LudovicoVan

unread,
Jan 3, 2012, 8:20:35 AM1/3/12
to
"Paolo opg" <spamc...@tiscali.it> wrote in message
news:Xns9FCF5B4DFA884sp...@193.43.96.1...

> 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.

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


0 new messages