Asp.net System.Byte[]显示在gridview中而不是图像中?

Asp.net System.Byte[]显示在gridview中而不是图像中?,asp.net,image,system,byte,Asp.net,Image,System,Byte,嗨,我有一个允许我上传照片的页面。然后当我点击上传…照片已经被批准。但当我想在gridview中显示它时。该图像必须显示的列将显示“System.Byte[]”,而不是图像。帮助:) 这是我的密码: <%@ Page Language="C#" Debug="true" %> <%@ Import Namespace="System" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespac

嗨,我有一个允许我上传照片的页面。然后当我点击上传…照片已经被批准。但当我想在gridview中显示它时。该图像必须显示的列将显示“System.Byte[]”,而不是图像。帮助:)

这是我的密码:

<%@ Page Language="C#" Debug="true" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace = "System.Data.SqlClient" %>
<%@ Import Namespace= "System.Data.OleDb" %>


<script runat="server" type="text/c#">
protected void btnUpload_Click(object sender, EventArgs e)


{
    {
   byte[] imageSize = new byte
                 [FileUpload1.PostedFile.ContentLength];
  HttpPostedFile uploadedImage = FileUpload1.PostedFile;
  uploadedImage.InputStream.Read
     (imageSize, 0, (int)FileUpload1.PostedFile.ContentLength);
 // Create SQL Connection 
  OleDbConnection con = new OleDbConnection();
  con.ConnectionString = ConfigurationManager.ConnectionStrings["recordsConnectionString"].ConnectionString;
 // Create SQL Command 
 OleDbCommand cmd = new OleDbCommand();
 cmd.CommandText = "INSERT INTO PendingRecords([Image])" + " VALUES (@Image)";
 cmd.CommandType = CommandType.Text;
 cmd.Connection = con;

 OleDbParameter UploadedImage = new OleDbParameter
              ("@Image", OleDbType.VarBinary, imageSize.Length);

 UploadedImage.Value = imageSize;
 cmd.Parameters.Add(UploadedImage);
 con.Open();
 cmd.ExecuteNonQuery();  
 GridView1.DataSourceID = "";
 GridView1.DataSource = SqlDataSource1;
 GridView1.DataBind();
 con.Close();
 }
}
</script>

<form id="form1" runat="server">
<div>
<asp:FileUpload ID="FileUpload1" runat="server"/>
<asp:Label ID="lblMessage" runat="server">
</asp:Label>
<asp:Button ID="btnUpload" runat="server" 
            OnClick="btnUpload_Click" Text="Upload"/>
</div>
<asp:GridView runat="server" id="GridView1" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" DataKeyNames="ID">
        <Columns>
            <asp:boundfield DataField="ID" HeaderText="ID" ReadOnly="True" InsertVisible="False" SortExpression="ID">
            </asp:boundfield>
            <asp:boundfield DataField="Image" DataFormatString="{0}" HeaderText="Image" SortExpression="Image">
            </asp:boundfield>
            <asp:boundfield DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName">
            </asp:boundfield>
        </Columns>
</asp:GridView>
<asp:SqlDataSource runat="server" id="SqlDataSource1" ProviderName="<%$ ConnectionStrings:recordsConnectionString.ProviderName %>" ConnectionString="<%$ ConnectionStrings:recordsConnectionString %>" SelectCommand="SELECT * FROM [PendingRecords]" DeleteCommand="DELETE FROM [PendingRecords] WHERE [ID] = ?" InsertCommand="INSERT INTO [PendingRecords] ([Username], [Password], [FirstName], [LastName], [MiddleName], [Address], [Gender], [ContactNumber], [PlateNumber], [Color], [Brand], [LiscensedNumber]) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" UpdateCommand="UPDATE [PendingRecords] SET [Username] = ?, [Password] = ?, [FirstName] = ?, [LastName] = ?, [MiddleName] = ?, [Address] = ?, [Gender] = ?, [ContactNumber] = ?, [PlateNumber] = ?, [Color] = ?, [Brand] = ?, [LiscensedNumber] = ? WHERE [ID] = ?">
    <DeleteParameters>
        <asp:parameter Name="ID" Type="Int32" />
    </DeleteParameters>
    <UpdateParameters>
        <asp:parameter Name="Username" Type="String" />
        <asp:parameter Name="Password" Type="String" />
        <asp:parameter Name="FirstName" Type="String" />
        <asp:parameter Name="LastName" Type="String" />
        <asp:parameter Name="MiddleName" Type="String" />
        <asp:parameter Name="Address" Type="String" />
        <asp:parameter Name="Gender" Type="String" />
        <asp:parameter Name="ContactNumber" Type="String" />
        <asp:parameter Name="PlateNumber" Type="String" />
        <asp:parameter Name="Color" Type="String" />
        <asp:parameter Name="Brand" Type="String" />
        <asp:parameter Name="LiscensedNumber" Type="String" />
        <asp:parameter Name="ID" Type="Int32" />
    </UpdateParameters>
    <InsertParameters>
        <asp:parameter Name="Username" Type="String" />
        <asp:parameter Name="Password" Type="String" />
        <asp:parameter Name="FirstName" Type="String" />
        <asp:parameter Name="LastName" Type="String" />
        <asp:parameter Name="MiddleName" Type="String" />
        <asp:parameter Name="Address" Type="String" />
        <asp:parameter Name="Gender" Type="String" />
        <asp:parameter Name="ContactNumber" Type="String" />
        <asp:parameter Name="PlateNumber" Type="String" />
        <asp:parameter Name="Color" Type="String" />
        <asp:parameter Name="Brand" Type="String" />
        <asp:parameter Name="LiscensedNumber" Type="String" />
    </InsertParameters>
</asp:SqlDataSource>
</form>

受保护的void btnUpload\u单击(对象发送方,事件参数e)
{
{
字节[]图像大小=新字节
[FileUpload1.PostedFile.ContentLength];
HttpPostedFile uploadedImage=FileUpload1.PostedFile;
上载的edimage.InputStream.Read
(imageSize,0,(int)FileUpload1.PostedFile.ContentLength);
//创建SQL连接
OleDbConnection con=新的OleDbConnection();
con.ConnectionString=ConfigurationManager.ConnectionString[“recordsConnectionString”]。ConnectionString;
//创建SQL命令
OleDbCommand cmd=新的OleDbCommand();
cmd.CommandText=“插入PendingRecords([Image])”+“值(@Image)”;
cmd.CommandType=CommandType.Text;
cmd.Connection=con;
OLEDB参数上传图像=新OLEDB参数
(“@Image”,OleDbType.VarBinary,imageSize.Length);
UploadeImage.Value=图像大小;
cmd.Parameters.Add(上传图像);
con.Open();
cmd.ExecuteNonQuery();
GridView1.DataSourceID=“”;
GridView1.DataSource=SqlDataSource1;
GridView1.DataBind();
con.Close();
}
}

我可能会为您提供一个不需要太多更改的小解决方案。有点凌乱

将图像绑定字段替换为下面的模板字段

   <asp:TemplateField>
            <HeaderTemplate>Image</HeaderTemplate>
            <ItemTemplate>
                <img src='data:image/jpg;base64,<%# Eval("Image") != System.DBNull.Value ? Convert.ToBase64String((byte[])Eval("Image")) : string.Empty %>' alt="image" height="100" width="200"/>
            </ItemTemplate>
        </asp:TemplateField>

形象
'alt=“image”height=“100”width=“200”/

因为它不是图像。这是一个
字节[]
!您不能期望系统知道您将数据读入的字节数组将显示为图像。感谢您的回复…错误:无法将“system.DBNull”类型的对象强制转换为“system.byte[]”类型??从这行“alt=”image“/>@PetersonPilares是的,它是必需的。我没有指向某个位置,而是直接在源代码上使用适当的属性设置图像数据(字节)。@PetersonPilares我已经修改了代码。请复制并替换上一个。@PetersonPilares我已经做了更改。请复制并替换。@PetersonPilares您可以使用图像宽度/高度属性,也可以使用css。我修改了代码以反映这一点。