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
相关产品推荐
相关产品推荐

