You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Asp.Net中如何在GridView显示数据库解码值?HttpUtility.HtmlDecode添加位置

解决GridView显示编码后数据库值的问题

嗨,这个问题很常见,我来给你两种可行的解决方案,对应你提供的代码场景:

方法1:在填充DataTable后直接解码(修改你的BindGrid方法)

在你的BindGrid方法里,当DataTable填充完成后、绑定到GridView之前,遍历每一行数据,对bookingName字段的值进行解码。这样整个DataTable里的值就都是解码后的,绑定到GridView后自然显示正常。

修改后的代码如下,我标出来了新增的部分:

private void BindGrid() { 
    string constr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
    using (SqlConnection con = new SqlConnection(constr)) { 
        using (SqlCommand cmd = new SqlCommand("select bookingName from addCart")) { 
            using (SqlDataAdapter sda = new SqlDataAdapter()) { 
                cmd.Connection = con; 
                sda.SelectCommand = cmd; 
                using (DataTable dt = new DataTable()) { 
                    sda.Fill(dt); 
                    // 新增:遍历DataTable,解码每个bookingName的值
                    foreach(DataRow row in dt.Rows)
                    {
                        if(!string.IsNullOrEmpty(row["bookingName"].ToString()))
                        {
                            row["bookingName"] = HttpUtility.HtmlDecode(row["bookingName"].ToString());
                        }
                    }
                    GridView1.DataSource = dt; 
                    GridView1.DataBind(); 
                } 
            } 
        } 
    }
}

注意:记得在代码文件顶部添加命名空间引用:using System.Web;,否则HttpUtility会报错。

方法2:利用GridView的RowDataBound事件解码(更灵活)

如果你以后需要处理多个字段,或者想在绑定每行的时候做更多自定义操作,可以用GridView的RowDataBound事件。这个事件会在每行数据绑定到GridView时触发,你可以在这里对单元格的值进行解码:

首先,在你的ASPX页面的GridView标签里添加OnRowDataBound="GridView1_RowDataBound"属性,比如:

<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound"></asp:GridView>

然后在后台代码里添加这个事件的处理方法:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    // 只处理数据行,不处理表头和表尾
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        // 获取当前行的bookingName值,解码后重新赋值给单元格
        string encodedValue = e.Row.Cells[0].Text; // 假设bookingName是第一列,根据你的实际列索引调整
        e.Row.Cells[0].Text = HttpUtility.HtmlDecode(encodedValue);
    }
}

这种方法不需要修改原来的BindGrid方法,适合需要精细化控制每行显示的场景。

内容的提问来源于stack exchange,提问作者depressedGirl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:26:53