2012-07-26 45 views
5

tengo un GridView:Cómo cambiar en un Gridview en caso RowDataBound el valor de un campo Eval()

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

La propiedad Enabled es un valor lógico. Ahora me gustaría mostrar habilitado/deshabilitado basado en verdadero/falso de la propiedad Enabled. Por lo tanto 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 

Pero no funciona ya que cuando se pone en marcha el evento e.Row.Cells(3).Text es una cadena vacía . ¿Como puedó resolver esté problema? Gracias

+0

¿Es una cadena vacía porque es 'NULL' en la base de datos? – mellamokb

+0

compararlo con 1? –

+0

Supongo que está vacío porque aún no ha sido enlazado ... – CiccioMiami

Respuesta

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

Mismo problema conmigo.

e.Row.Cells[i].Text estaba vacío. Creo que los datos no están vinculados en el momento que es de alguna manera extraño ya que estamos en el evento RowDataBound.

Sin embargo, he utilizado:

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

donde "RNID" es uno de los nombres de columna en mi solicitud. Esto resolvió mi problema.

Cuestiones relacionadas