30

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

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

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

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

4

9 回答 9

49

HtmlEncode属性设置为false? 对我来说,这要简​​单得多。

<asp:BoundField DataField="MyColumn" HtmlEncode="False" />
于 2010-04-02T04:31:46.480 回答
46

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

if (e.Row.RowType == DataControlRowType.DataRow)
{
  string decodedText = HttpUtility.HtmlDecode(e.Row.Cells[0].Text);
  e.Row.Cells[0].Text = decodedText;
}
于 2009-01-10T22:08:19.283 回答
4
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;
        }
    }
}
于 2014-02-24T13:00:33.160 回答
3

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

于 2009-01-10T22:36:59.910 回答
2

我首先使用从多行文本框中将数据插入到我的 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
于 2010-02-18T15:07:39.890 回答
2

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 开始,但显然它可以满足您的任何需求。

于 2010-04-02T03:20:33.807 回答
1
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);
}
于 2015-09-26T02:35:19.453 回答
1

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

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;
};
于 2016-09-18T10:47:15.203 回答
0

@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;
}
于 2017-09-10T08:48:32.617 回答