我正在将GridView绑定到LINQ查询。 LINQ语句创建的对象中的某些字段是字符串,需要包含新行。

显然,GridView对每个单元格中的所有内容进行HTML编码,因此我无法插入< br />在单元格中创建一个新行。

如何告诉GridView不要对单元格的内容进行HTML编码?

也许我应该使用不同的控件?

有帮助吗?

解决方案

您可以订阅RowDataBound事件吗?如果可以,您可以运行:

if (e.Row.RowType == DataControlRowType.DataRow)
{
  string decodedText = HttpUtility.HtmlDecode(e.Row.Cells[0].Text);
  e.Row.Cells[0].Text = decodedText;
}

其他提示

如何设置 HtmlEncode 属性 false ?对我来说,这更简单。

<asp:BoundField DataField="MyColumn" HtmlEncode="False" />

输出中是否保留了正常的换行符?如果是这样,您可以发送换行符,并使用css样式 white-space:pre ,这将保留换行符,空格和制表符。

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{

    for (int i = 0; i < e.Row.Cells.Count; i++)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            string decodedText = HttpUtility.HtmlDecode(e.Row.Cells[i].Text);
            e.Row.Cells[i].Text = decodedText;
        }
    }
}

Booysen的答案有效,但仅适用于一栏。如果在RowDataBound事件中运行循环,则可以将变量替换为[0],并根据需要对每个列执行此操作。这是我做的:

protected void gridCart_RowDataBound(object sender, GridViewRowEventArgs e)
{
    for (int i = 1; i < 4; i++)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            string decode = HttpUtility.HtmlDecode(e.Row.Cells[i].Text);
            e.Row.Cells[i].Text = decode;
        }
    }
}

由于我的数据,我故意在1开始,但显然它可以满足您的需要。

我首先使用

从多行文本框中将数据插入到我的sql-server表中
   replace (txt = Replace(txt, vbCrLf,"<br />"))

然后我使用Ray Booysen的解决方案将其返回到我的gridview:

 Protected Sub grdHist_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grdHist.RowDataBound

      Dim col1 As String = HttpUtility.HtmlDecode(e.Row.Cells(2).Text)

      e.Row.Cells(2).Text = col1

End Sub
protected void gvHead_OnRowDataBound(object sender, GridViewRowEventArgs e) {
  for (int i = 0; i < e.Row.Cells.Count; i++) 
    e.Row.Cells[i].Text = HttpUtility.HtmlDecode(e.Row.Cells[i].Text);
}

您必须绑定到DataBoundGrid事件并更改要呈现HTML代码的列的Rendering。

public event EventHandler DataBoundGrid {
  add { ctlOverviewGridView.DataBound += value; }
  remove { ctlOverviewGridView.DataBound -= value; }
}

ctlOverview.DataBoundGrid += (sender, args) => {
  ((sender as ASPxGridView).Columns["YourColumnName"] as GridViewDataTextColumn).PropertiesTextEdit.EncodeHtml = false;
};

@Ray Booysen 答案是对的,但在某些情况下,HtmlDecode()无法处理您的问题。你可以使用UrlDecode()而不是HtmlDecode()。 点击 这是另一种解决方案:

if (e.Row.RowType == DataControlRowType.DataRow)
{
  string decodedText = HttpUtility.UrlDecode(e.Row.Cells[0].Text);
  e.Row.Cells[0].Text = decodedText;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top