严格来说是BoundColumn没有进行HTML编码。
不用BoundColumn,那么不是好麻烦了?一个好的方法是继承BoundColumn.....

解决方案 »

  1.   

    using System;
    using System.Web;
    using System.Web.UI.WebControls;namespace XX.Controls
    {
    /// <summary>
    /// 对绑定的数据进行HTML编码。
    /// </summary>
    public class EncodedBoundColumn:BoundColumn
    {
    protected override string FormatDataValue(object dataValue)
    {
    string res=base.FormatDataValue(dataValue);
    return HttpUtility.HtmlEncode(res);
    }
    }
    }
    -------
    <XX:EncodedBoundColumn DataField="AnyXML"></XX:EncodedBoundColumn>
      

  2.   

    <%@ Page language="c#" AutoEventWireup="false" Inherits="System.Web.UI.Page" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>WebForm1</title>
    <script language="C#" runat="server">
    class Item
    {
    public string Value
    {
    get{
    return "<span style='color:red'>"+this.GetHashCode()+"</span>";
    }
    }
    }
    protected override void OnLoad(EventArgs e)
    {
    ArrayList al=new ArrayList();
    for(int i=0;i<10;i++)
    al.Add(new Item());
    DataGrid1.DataSource=al;
    DataGrid1.DataBind();
    }
    void OnItemDataBound(Object sender, DataGridItemEventArgs e) 
    {
    int index=0;
    foreach(DataGridColumn c in DataGrid1.Columns)
    {
    if(c is BoundColumn)
    {
    e.Item.Cells[index].Text=HttpUtility.HtmlEncode(e.Item.Cells[index].Text);
    }
    index++;
    }
    } </script>
    <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body>
    <form id="WebForm1" method="post" runat="server">
    <asp:DataGrid id="DataGrid1" runat="server" OnItemDataBound="OnItemDataBound">
    <Columns>
    <asp:BoundColumn DataField="Value"></asp:BoundColumn>
    </Columns>
    </asp:DataGrid>
    </form>
    </body>
    </HTML>
      

  3.   

    当然不能让他进行HTML的编码,因为我发现不用HTML的编码,我可以用DATAGRID实现很多特效,在数据库中就放入一些<input type="***"></input>
    在页面上就可以显示出来,很好的效果!