2010-06-23 3 views
0

J'ai une vue de données et lie une table avec un champ BLOB qui contient du texte simple et non de l'image. Après cela, datagridview essaie d'afficher le texte en tant qu'image et génère une exception. Est-il possible de désactiver datagridview d'afficher des images en correspondance avec des champs blob?DataGridView Désactivation de l'image

Le code est à peu près comme ceci:

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

Répondre

0

Vous pouvez définir AutoGenerateColumns false et ajouter les champs non-blob manuellement.

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

Pour les colonnes blob ajouter un TemplateField à la place.

<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> 

Résultant en quelque chose comme ceci:

<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> 

Voici le code de test complet du côté serveur:

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