Pregunta

Actualmente estoy enlazando un conjunto de datos con una cuadrícula de datos.

ds = query.ExecuteReadQuery("select PollQuestionText as 'Survey Question',    
PollAnswer1Text as 'Selection 1', PollAnswer2Text as 'Selection 2', PollAnswer3Text  
as 'Selection 3', PollEnabled 'Status'  from tbl_pollquestions")

For Each row As Data.DataRow In ds.Tables(0).Rows
        If row.ItemArray(4).ToString = "0" Then
            row.ItemArray."<a href=""""> <img src=""img/box_icon_edit_pencil1.gif"" border=""0""> </a>"

        ElseIf row.ItemArray(4).ToString = "1" Then
            row.Item(4) = "<a href=""""> <img src=""img/box_icon_edit_pencil2.gif"" border=""0""> </a>"
        End If

    Next

GridView1.DataSource = ds

GridView1.DataBind()

Como estoy insertando código html, ¿por qué esto no se está convirtiendo a html?

El resultado de salida es todo el texto. (Supongamos que se muestra un icono sin URL de redireccionamiento)

No sé por qué.

Gracias

¿Fue útil?

Solución

Aquí hay una forma rápida de resolver su problema sin usar la plantilla de contenido.

Primero, agregue el evento RowDataBound a su GridView.

<asp:GridView ID="GridView1" runat="server" onrowdatabound="GridView1_RowDataBound">
</asp:GridView>

Segundo, agregue el código para el controlador de eventos usando su lógica. El evento RowDataBound se activará para cada fila, no tenemos que usar foreach . Estoy usando C # pero puedes convertirlo fácilmente a VB.

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {    
    if (e.Row.RowType == DataControlRowType.DataRow) {        
        if (e.Row.Cells[4].Text == "0") {            
            e.Row.Cells[4].Text = "<a href=''> <img src='img/box_icon_edit_pencil1.gif' border='0'> </a>"
        } else {
            e.Row.Cells[4].Text = "<a href=''> <img src='img/box_icon_edit_pencil2.gif' border='0'> </a>"
        }
    }
}

Como nota al margen, es posible que desee cambiar

<a href=''> <img src='img/box_icon_edit_pencil1.gif' border='0'> </a>
<a href=''> <img src='img/box_icon_edit_pencil2.gif' border='0'> </a>

a

<a href="" class="Pencil1"></a>
<a href="" class="Pencil2"></a>

y configure la imagen de fondo usando CSS.

Otros consejos

Para que GridView genere HTML, todo lo que necesita hacer es establecer el parámetro HtmlEncode en falso en el campo enlazado deseado.

<asp:BoundField DataField="Question" HeaderText="Question" HtmlEncode="false" />

Si está utilizando una vista de cuadrícula, es posible que desee utilizarla como estaba previsto.

Debería tener una plantilla de contenido.

Si necesita formatear en función de los valores, hágalo en el evento rowdatabound.

Creo que está obteniendo el "inesperado" comportamiento porque gridview puede unirse a una amplia gama de colecciones (Array, Hashtable, Dataset, etc.) y gestiona cómo vincula específicamente los datos.

La intención de gridview es hacer el formateo en la sección html de la página ... Hay muchos formatos sofisticados que puedes hacer allí.

Si tiene la intención de utilizar vistas de cuadrícula, es bueno estar familiarizado con los eventos onrowdatabound y onrowcommand ...

ARREGLO RÁPIDO:

Supongo que podría tomar un poco de tiempo aprender cómo hacerlo de la manera correcta. Mientras tanto, si desea una solución rápida a su problema con la menor cantidad de cambio:

  • usa un control asp: literal para el lugar donde quieres tu imagen
  • cambie su consulta en la base de datos para reemplazar el valor de retorno con el html en lugar del valor 0/1
  • enlace el literal al valor de retorno y omita su sección de formato actual
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top