Solución:
Simplemente configure el BoundColumn.HtmlEncode
propiedad a falso:
<asp:BoundField DataField="HtmlLink" HtmlEncode="false" />
Me temo que no existe una forma sencilla de deshabilitar la codificación HTML de los contenidos en una GridView
con AutoGenerateColumns
= true
. Sin embargo, puedo pensar en dos soluciones que podrían resolver el problema al que se enfrenta:
Opción 1: Heredar el GridView
clase, anula el Render
método, recorrer todas las celdas, decodificar su contenido, antes de ejecutar el método base:
for (int i = 0; i < Rows.Count; i++)
{
for (int j = 0; j < Rows[i].Cells.Count; j++)
{
string encoded = Rows[i].Cells[j].Text;
Rows[i].Cells[j].Text = Context.Server.HtmlDecode(encoded);
}
}
Opcion 2: En una clase heredada de GridView
o en el Page
o Control
usándolo, haga su propia inspección del DataTable
y crea un explícito BoundColumn
para cada columna:
foreach (DataColumn column in dataTable.Columns)
{
GridViewColumn boundColumn = new BoundColumn
{
DataSource = column.ColumnName,
HeaderText = column.ColumnName,
HtmlEncode = false
};
gridView.Columns.Add(boundColumn);
}
Pude lograr esto usando la solución que proporcionó Jørn Schou-Rode, modifiqué un poco para que funcione desde el evento RowDataBound de mi Gridview.
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
for (int j = 0; j < e.Row.Cells.Count; j++)
{
string encoded = e.Row.Cells[j].Text;
e.Row.Cells[j].Text = Context.Server.HtmlDecode(encoded);
}
}
}
Otra forma es agregar algo como lo siguiente al controlador de eventos RowDataBound …
If e.Row.RowType = DataControlRowType.Header Then
For Each col As TableCell In e.Row.Cells
Dim encoded As String = col.Text
col.Text = Context.Server.HtmlDecode(encoded)
Next
End If