2012-07-26 3 views
5

Ho un GridView:Come cambiare in un GridView sulla manifestazione RowDataBound il valore di un campo Eval()

<asp:GridView ID="gvDownloads"> 
    <Columns> 
     <asp:TemplateField HeaderText="Status" > 
     <ItemTemplate> 
      <%# Eval("Enabled")%> 
     </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
<asp:GridView/> 

La proprietà Enabled è un valore booleano. Ora desidero visualizzare Abilitato/Disabilitato in base a Vero/Falso della proprietà Enabled. Quindi io uso:

Sub gvDownloads_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles gvDownloads.RowDataBound 

     If e.Row.RowType = DataControlRowType.DataRow Then 

      If e.Row.Cells(3).Text = "True" Then 
       e.Row.Cells(3).Text = "Enabled" 
      Else 
       e.Row.Cells(3).Text = "Disabled" 
      End If 

     End If 

End Sub 

Ma non funziona da quando viene lanciato l'evento e.Row.Cells(3).Text è un stringa vuota. Come posso risolvere questo problema? Grazie

+0

È una stringa vuota perché è 'NULL' nel database? – mellamokb

+0

confrontalo con 1? –

+0

Immagino sia vuoto perché non è ancora stato collegato ... – CiccioMiami

risposta

4
If e.Row.Cells(3).Text <> Boolean.FalseString Then 
     e.Row.Cells(3).Text = "Enabled" 
Else 
     e.Row.Cells(3).Text = "Disabled" 
End If 
2

Lo stesso problema con me.

e.Row.Cells[i].Text era vuoto. Penso che i dati non siano vincolati al momento che è in qualche modo strano visto che siamo nell'evento RowDataBound.

Tuttavia, ho usato:

 DataRowView drv = (DataRowView) e.Row.DataItem; 
    if (drv["RNID"].ToString() == "") 
    { 
     e.Row.Visible = false; 
    } 

dove "RNID" è uno dei nomi di colonna nella mia applicazione. Questo ha risolto il mio problema.