94 messaggi dal 29 ottobre 2002
Ho una pagina creata tempo fa, nella quale il colore delle celle di una griglia variava in base al valore in esse contenuto.
Ho sostituito una normale colonna con una hyperlink, e la formattazione non funziona più. Come correggere?

Sub DataGrid2_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs)

If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then

Dim n

For n = 2 To e.Item.Cells.Count - 1
e.Item.Cells(n).Attributes.Add("align", "center")
If e.Item.Cells(n).Text = "G" Then
e.Item.Cells(n).BackColor = Drawing.Color.Yellow

e.Item.Cells(n).Text = ""
ElseIf e.Item.Cells(n).Text = "V" Then
e.Item.Cells(n).BackColor = Drawing.Color.GreenYellow

e.Item.Cells(n).Text = ""
ElseIf e.Item.Cells(n).Text = "R" Then
e.Item.Cells(n).BackColor = Drawing.Color.Red
e.Item.Cells(n).Text = ""
End If

e.Item.Cells(n).Width = "15"
Next
End If



la parte sottostante prima era funzionante così:
<asp:BoundColumn DataField="G1" HeaderText="1"></asp:BoundColumn>

quando ho sostituito la boundcolumn con la colonna hyperlink (vedi sotto) le condizioni soprascritte di modifica colore celle non funzionano più:

<asp:HyperLinkColumn headertext="1" DataTextField="G1" DataNavigateUrlField="idOra" DataNavigateUrlFormatString="javascript:popwin=window.open('a2012_DBPopUpGiorno.aspx?id={0}',null,'width=468,height=500,scrollbars=1'); void(''); " />

grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

francescoC ha scritto:

quando ho sostituito la boundcolumn con la colonna hyperlink (vedi sotto) le condizioni soprascritte di modifica colore celle non funzionano più

Già, questo succede perché l'HyperLinkColumn genera un contenuto di cella diverso dal BoundColumn.

In particolare, nella cella non troverai del testo semplice ma un controllo HyperLink. E' la proprietà .Text di questo HyperLink che dovrai andare a leggere.

Quindi, il recupero del valore cambia a seconda che la colonna sia di un tipo o dell'altro. Questa distinzione deve essere presente nel tuo codice.
Usa un blocco Select Case per determinare il tipo di colonna, e poi usa l'uno o l'altro sistema. Prova così:
Sub DataGrid2_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs)

    If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then

        Dim n As Integer


        For n = 2 To e.Item.Cells.Count - 1

            Dim cella As TableCell = e.Item.Cells(n)
            cella.Attributes.Add("align", "center")
            cella.Width = "15"

            Dim valore As String = String.Empty

            'Qui determino il tipo della colonna
            Select Case CType(sender, DataGrid).Columns(n).GetType()
                'Se è BoundColumn, allora mi limito a leggerne il .Text
                Case GetType(BoundColumn)
                    valore = cella.Text
                    'Se è HyperLinkColumn, devo andare a recuperare il controllo HyperLink per leggere la sua proprietà .Text
                Case GetType(HyperLinkColumn)
                    valore = CType(cella.Controls(0), HyperLink).Text
            End Select

            'Ora, in base al valore ottenuto, applico uno sfondo
            Select Case valore
                Case "G"
                    cella.BackColor = Drawing.Color.Yellow
                Case "V"
                    cella.BackColor = Drawing.Color.GreenYellow
                Case "R"
                    cella.BackColor = Drawing.Color.Red
            End Select
        Next
    End If
End Sub

Enjoy learning and just keep making
94 messaggi dal 29 ottobre 2002
Grazieeee! Sei un grande, gentilissimo anche per avermi postato per intero il codice giusto.Erano giorni che tentavo. Grazie

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.