2010-06-23 65 views
0

我有一个datagridview并绑定一个包含简单文本而不是图像的blob字段的表。在此datagridview尝试显示文本为图像并生成一个异常。 是否可以禁用datagridview显示与blob字段对应的图像?DataGridView图像禁用

的代码大约是这样的:

// maybe datagridview has some property to set in order to disable such behavior? 
gridView.DataSource = mytable_with_blob_field; 

回答

0

您可以设置AutoGenerateColumns为false,并手动添加非BLOB字段。

<asp:BoundField HeaderText="Header text" DataField="FieldToBind" /> 

对于blob列,改为添加TemplateField

<asp:TemplateField HeaderText="Blob as Text"> 
    <ItemTemplate> 
     <asp:Literal ID="blob" runat="server" Text='<%# new UTF8Encoding().GetString((Container.DataItem as Custom).Blob) %>' /> 
    </ItemTemplate> 
</asp:TemplateField> 

所得弄成这个样子:

<asp:GridView ID="grid" runat="server" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:BoundField HeaderText="Header text" DataField="FieldToBind" /> 
     <asp:TemplateField HeaderText="Blob as Text"> 
      <ItemTemplate> 
       <asp:Literal ID="blob" runat="server" Text='<%# new UTF8Encoding().GetString((Container.DataItem as Custom).Blob) %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

这里是从服务器端的完整的测试代码:

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Web.UI.WebControls; 

namespace TestWeb 
{ 
    public class Custom 
    { 
     public string FieldToBind { get; set; } // other fields 
     public byte[] Blob { get; set; } // your blob 
    } 

    public partial class _Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      var list = new List<Custom>(); 
      list.Add(new Custom { FieldToBind = "pure text", Blob = new UTF8Encoding().GetBytes("blob") }); 
      grid.DataSource = list; 
      /*grid.RowDataBound += (rS, rE) => 
      { 
       if (rE.Row.RowType == DataControlRowType.DataRow) 
       { 
        // could also be bound by the server-side 
        //(rE.Row.FindControl("blob") as ITextControl).Text = new UTF8Encoding().GetString((rE.Row.DataItem as Custom).Blob); 
       } 
      };*/ 
      grid.DataBind(); 
     } 
    } 
}