我有一个datagridview并将一个带有blob字段的表绑定到它包含简单文本而不是图像。在此datagridview尝试将文本显示为图像并生成异常之后。 是否可以禁用datagridview显示与blob字段对应的图像?
代码大致如下:
// maybe datagridview has some property to set in order to disable such behavior?
gridView.DataSource = mytable_with_blob_field;
答案 0 :(得分: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();
}
}
}