DataGridView图像禁用

时间:2010-06-23 16:15:39

标签: c# datagridview

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

代码大致如下:

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

1 个答案:

答案 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();
        }
    }
}