[Vb] Gestire contenuto cella gridview in base a valore campo db

giovedì 20 novembre 2008 - 12.46

samar Profilo | Senior Member

Salve a tutti, ho il seguente problema, che ho cercato di risolvere inutilmente col codice sottostante: vorrei che in una cella della gridview non comparisse l'hyperlink se il valore di un campo del db bindato dalla gridview ha valore per esempio uguale a "1".
Nel codice la cella dovrebbe diventare con sfondo rosso se diverso da "1" e bianco se uguale ma il risultato è che è sempre uguale...help!

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

fguida Profilo | Expert

Ciao, io per poter formattare delle colonne all'interno della Grid a seconda del risultato ho fatto in questo modo:


foreach (GridViewRow gvr in gv.Rows)
{
#region Cell 3;
HyperLink hl3 = (HyperLink)gvr.Cells[3].Controls[0];
if (hl3.Text == "RESPONSABILE")
{
hl3.Enabled = true;
hl3.NavigateUrl = "";
}
#endregion
....

praticamente controllo il contenuto e se True disabilito il link; tu coloralo come vuoi

ps: l'esempio è in c# ma ilconcetto è lo stesso

Francesco

samar Profilo | Senior Member

L'hai inserita nel pageload?

fguida Profilo | Expert

Il codice è contenuto in un metodo richiamato dal Page_LoadComplete

Francesco

samar Profilo | Senior Member

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

ma come risultato ho sempre hyperlink visibile....

fguida Profilo | Expert

Prova a sostituire nella if :

Grv.Cells(1).Text

con

HL.Text

Credo sia per quello che non trova il controllo.

Francesco

balfaz Profilo | Expert

scusate l'intrusione ma in questi casi uso un controllo literal il quale andrebbe impostato in questa maniera
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

è solo una idea vedete voi
"Ci sono due tipi di pazzi, quelli che dicono pazzie e quelli che le fanno diventare una realtà."

samar Profilo | Senior Member

>Prova a sostituire nella if :
>
>Grv.Cells(1).Text
>
>con
>
>HL.Text
>
>Credo sia per quello che non trova il controllo.
>
>Francesco
>

Forse mi ero spiegato male, non devo controllare il testo dell'hyperlink ma il testo di un'altro campo del db,che è bindato in un'altra colonna e in base al suo valore faccio vedere o meno l'hyperlink...
praticamente in base al testo di un boundfield devo fare vedere o meno l'hyperlink...

balfaz Profilo | Expert

hai letto il thread che ti ho inviato
"Ci sono due tipi di pazzi, quelli che dicono pazzie e quelli che le fanno diventare una realtà."

samar Profilo | Senior Member

Si si, ma il directcast nn mi converte GridView1.Columns(7) in literal...

balfaz Profilo | Expert

usa questa istruzione
Dim Lit As literal = ctype(GridView1.Columns(7), literal)

"Ci sono due tipi di pazzi, quelli che dicono pazzie e quelli che le fanno diventare una realtà."

samar Profilo | Senior Member

Mi torna questo:

Impossibile convertire il valore di tipo "System.Web.UI.WebControls.DataControlField" in "System.Web.UI.WebControls.Literal".

balfaz Profilo | Expert

scusa innanzitutto devi fare che questa colonna sia di tipo itemTemplate in questa maniera sia direttamente dal controllo o da codice questo nel aspx
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:Literal ID="LitRw" runat="server" />
</ItemTemplate>
</asp:TemplateField>

"Ci sono due tipi di pazzi, quelli che dicono pazzie e quelli che le fanno diventare una realtà."

samar Profilo | Senior Member

Lo avevo intuito e avevo provato a fare già la modifica, ma l'errore è lo stesso:

behind:

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


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

ci vorrebbe un emoticon che dà le testate contro un muro!!!!

balfaz Profilo | Expert

per l'evento rowdatabound, stai gia lavorando nella riga di dati quindi devi far cosi
Dim LitX As Literal = CType(e.Row.Cells(nro_colonna).FindControl("LitRw"), Literal)

ja, ja, ja , hai ragione magari anche un'altro con le parolacce di fianco sai "??@?###", ma almeno stai risolvendo

"Ci sono due tipi di pazzi, quelli che dicono pazzie e quelli che le fanno diventare una realtà."

samar Profilo | Senior Member

>per l'evento rowdatabound, stai gia lavorando nella riga di dati
>quindi devi far cosi
>Dim LitX As Literal = CType(e.Row.Cells(nro_colonna).FindControl("LitRw"),
>Literal)
...chiaro

grazie al tuo aiuto ho risolto mettendo quella dichiarazione dentro il primo IF...

grazie ancora

balfaz Profilo | Expert

PREGOX
"Ci sono due tipi di pazzi, quelli che dicono pazzie e quelli che le fanno diventare una realtà."
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