您可以设置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();
}
}
}