首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

解決 GridView 單元格換行失效:自動換行與強制換行完整方案

     編輯:ASP.NET 基礎

兩類換行需求

  1. 自動換行:內容過長時自動折行,不需手動插入換行符。
  2. 強制換行:開發者在資料中植入 <br/> 指定換行位置 (如「課程名<br/>教室<br/>老師」)。

自動換行:純 CSS 解決

GridView 預設 word-wrap: break-word 已開啟自動換行。若**不想**自動換行 (保持單行、超出隱藏或橫向捲動):

// 後端註冊樣式
GridView1.Attributes.Add("style", "word-break:keep-all; word-wrap:normal; white-space:nowrap;");

// 或 CSS 類別
.gv-nowrap { word-break: keep-all; word-wrap: normal; white-space: nowrap; }
<asp:GridView CssClass="gv-nowrap" ...>

屬性說明:
word-break:keep-all 中日韓文字不斷詞;
word-wrap:normal 單字過長不強制斷行;
white-space:nowrap 強制單行顯示。

強制換行:關鍵在於 HtmlEncode

GridView **預設開啟 HtmlEncode** (將 < 轉為 &lt;),導致 <br/> 以純文字顯示而不換行。

方法一:TemplateField 關閉 HtmlEncode

<asp:TemplateField HeaderText="課程資訊">
    <ItemTemplate>
        <%# Eval("CourseInfo") %> <!-- 已包含 <br/> -->
    </ItemTemplate>
</asp:TemplateField>

或 BoundField 設定:
<asp:BoundField DataField="CourseInfo" HtmlEncode="false" />

方法二:AutoGenerateColumns + RowDataBound 解碼

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        foreach (TableCell cell in e.Row.Cells)
        {
            // 將整列所有 HtmlEncode 內容還原
            cell.Text = Server.HtmlDecode(cell.Text);
        }
    }
}

※ 僅需特定欄位解碼時,在迴圈中判斷 cell.ContainingField 或索引。

完整驗證範例

// 資料準備
var dt = new DataTable();
dt.Columns.Add("Info");
dt.Rows.Add("第一行<br/>第二行<br/>第三行");
dt.Rows.Add("無換行內容");
GridView1.DataSource = dt;
GridView1.DataBind();

// 方案:RowDataBound HtmlDecode
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
        foreach (TableCell c in e.Row.Cells) c.Text = Server.HtmlDecode(c.Text);
}

結果:第一列顯示三行,第二列單行。

常見誤區

  • 在資料層使用 \r\n 或 Environment.NewLine → **HTML 忽略換行符**,必須用 <br/>。
  • 只設 HtmlEncode="false" 卻未在資料中放入 <br/> → 不會換行。
  • 同時開啟 white-space:pre-wrap 與 HtmlEncode=false → 可直接用 \n 但需注意 XSS 風險。

安全性提醒

關閉 HtmlEncode 等同允許 HTML 標籤輸出,**資料來源必須受信** (後台管理、系統產生)。若資料來自使用者輸入,**必須先 Sanitize (如 HtmlSanitizer 庫) 再關閉 HtmlEncode**,否則極易造成 XSS。

結語

GridView 換行核心口訣:
**自動換行** → CSS word-wrap/word-break/white-space;
**強制換行** → 資料含 <br/> + **關閉 HtmlEncode** (TemplateField 或 RowDataBound)。
記住安全第一:不可信資料**永不**關閉 HtmlEncode。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved