【问题标题】:line break in DataTable and GridViewDataTable 和 GridView 中的换行符
【发布时间】:2012-05-04 13:39:58
【问题描述】:

我实际上是在尝试使用 c# 在 asp.net 项目中的字符串中插入换行符。我将此字符串放在 DataRow 中,然后将其添加到名为“ds”的数据表中。完成后,我会链接此数据表 ds到网格视图。 这是我的代码:

            risque.projet = dt.Rows[i]["fk_projet"].ToString();
            risque.release = dt.Rows[i]["fk_release"].ToString();

            //Create the String for adding to the row
            String test = "Project:"+risque.projet+"<br>"+ "Release: "+risque.release;
            drow["Description"] = test;
            Label1.Text = test;


            //Add the row to the datatable.
            ds.Rows.Add(drow);

            //Link the datatable to the gridview
            GridView1.DataSource = ds;
            GridView1.DataBind();

我想要这个输出:

项目:.......

发布:.......

但我总是有:项目:....发布......

我尝试了很多解决方案: -System.Environment.NewLine -\r\n -\n

编辑:我的 gridView 的代码。我的 gridview 中没有任何内容,因为所有内容都是在运行时创建的。

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
        EnableSortingAndPagingCallbacks="True" PageSize="5">
        <SelectedRowStyle Wrap="True" />
    </asp:GridView>

但是没有任何效果。 br 标签有效,但仅当我在标签中显示我的字符串时才有效。

你知道我的错误吗?你有解决办法吗?我在这上面花了太多时间。

谢谢,

昆汀

【问题讨论】:

  • 你能显示 Gridview 的 aspx 代码吗?

标签: asp.net string gridview datatable


【解决方案1】:

它应该可以将标签放入,但将列的 HtmlEncode 属性设置为 false。默认情况下,所有字段都是 HtmlEncoded,这当然会阻止 html 标签像 html 标签一样工作。

但是,如果您这样做,则需要在代码隐藏中手动对字段值进行 htmlencode 以防止 XSS。

"Project:" + Server.HtmlEncode(risque.projet )+ "<br />" + "Release: " + Server.HtmlEncode(risque.release)

(与 Server.HtmlEncode 相比,我更喜欢 Anit-Cross-Site Scripting 库的 HtmlEncode 实现,但这是另一个主题。)

【讨论】:

  • 嗨,大卫,你的解决方案很好,但你的行不正常。我仍在搜索解决方案。显然我必须使用 server.htmlEncode 初始化我的 gridview 的单元格。
  • 啊..我明白了。您让运行时自动生成列。我认为您将需要设置 AutoGenerateColumns = false 并指定列。您不能从代码隐藏中指定 HtmlEncode。我唯一的另一种选择是使用 TemplateField,这再次意味着指定列。
  • 谢谢大卫,我刚刚找到解决方案。我将发布它。
  • 好交易!我期待看到它!
【解决方案2】:

在这种情况下,您可以使用回车符 vbCrLf 来代替连接中断标记。

回车字符用于打印和显示功能。

但是,C# 中不存在 vbCrLf。 vbCrLf 的值为“\r\n”。所以试试下面这个。

string vbCrLf = "\r\n";
String test = "Project:" + risque.projet + vbCrLf + "Release: " + risque.release;

【讨论】:

    【解决方案3】:

    将网格列转换为模板列,标签将发挥作用。如果将数据绑定到标签,
    将起作用。

    【讨论】:

      【解决方案4】:

      我认为你需要:&lt;br /&gt; 而不是 &lt;br&gt;

      【讨论】:

        猜你喜欢
        • 2013-07-24
        • 2015-02-23
        • 2013-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-09
        • 2020-10-18
        • 2020-06-23
        相关资源
        最近更新 更多