Avatar billede mlunde Nybegynder
26. november 2010 - 09:16 Der er 6 kommentarer og
1 løsning

Imagefield i Visual Studio 2010 - flere billeder i Gridview

Hej. Det er lykkedes mig at lave en billedeupload til en database og derefter en eventhandler, der kan vise billedet fra den binære kode, som billedet har fået i databasen.
Men, den vil ikke lade mig vise mere et billede i Gridview, selvom jeg har lagt flere billeder ind, selvfølgelig ved hvert sit ID (som hedder DealID i dette tilfælde).

Her er gridview koden:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
        DataKeyNames="dealID" DataSourceID="SqlDataSource1">
        <Columns>
            <asp:BoundField DataField="dealID" HeaderText="dealID" InsertVisible="False"
                ReadOnly="True" SortExpression="dealID" />
            <asp:BoundField DataField="title" HeaderText="title" SortExpression="title" />
            <asp:BoundField DataField="originalPrice" HeaderText="originalPrice"
                SortExpression="originalPrice" />
            <asp:BoundField DataField="midPrice" HeaderText="midPrice"
                SortExpression="midPrice" />
            <asp:BoundField DataField="lowPrice" HeaderText="lowPrice"
                SortExpression="lowPrice" />
            <asp:BoundField DataField="buyers" HeaderText="buyers"
                SortExpression="buyers" />
                <asp:TemplateField HeaderText="Image">
                <ItemTemplate>
                <asp:Image ID="Image1" runat="server"
                          ImageUrl='<%# "Handler.ashx?dealID=" + Eval("dealID")%>'/>
                </ItemTemplate>
                </asp:TemplateField>
        </Columns>
    </asp:GridView>



Her er min eventhandler - handler.ashx:

<%@ WebHandler Language="C#" Class="Handler" %>

using System;
using System.Web;
using System.Configuration;
using System.Data.SqlClient;

public class Handler : IHttpHandler {
   
    public void ProcessRequest (HttpContext context)
    {
        SqlConnection con = new SqlConnection();
        con.ConnectionString = ConfigurationManager.ConnectionStrings["DealSource"].ConnectionString;

        // Create SQL Command. Pic1 is the row where the image is uploaded from the table Deals having DealID as primary key. The ASP.net code is: <asp:Image ID="Image1" runat="server" ImageUrl='<%# "Handler.ashx?dealID=" + Eval("dealID")%>'/>
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "Select pic1 from Deals where dealID =@dealID";
        cmd.CommandType = System.Data.CommandType.Text;
        cmd.Connection = con;

        SqlParameter ImageID = new SqlParameter("@dealID", System.Data.SqlDbType.Int);
        ImageID.Value = context.Request.QueryString["dealID"];
        cmd.Parameters.Add(ImageID);
        con.Open();
        SqlDataReader dReader = cmd.ExecuteReader();
        dReader.Read();
        context.Response.BinaryWrite((byte[])dReader["pic1"]);
        dReader.Close();
        con.Close();
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}


Jeg får fejlen på denne linie:
context.Response.BinaryWrite((byte[])dReader["pic1"]);
og fejlen er
"Unable to cast object of type 'System.DBNull' to type 'System.Byte[]'."


Nogle der har noget?
Avatar billede platik Nybegynder
26. november 2010 - 09:45 #1
At dømme ud fra fejlen får du af vide der ikke ligger noget i dit DB felt pic1. Den trækker værdien Null ud som du ikke kan caste til binært array. Sikker på der ligger noget i pic1 på det ID du tester på?
Avatar billede mlunde Nybegynder
26. november 2010 - 09:51 #2
Ja, fordi jeg har en anden side, der bruger den samme eventhandler, uden problemer. Forskellen er bare, at den kun henter ud fra et ID og dermed et billede.
Avatar billede platik Nybegynder
26. november 2010 - 10:08 #3
Er det meningen overstående skal hente flere billeder ud?

Prøv:

dReader.Read();
if (dReader["pic1"] != DBNull)
    context.Response.BinaryWrite((byte[])dReader["pic1"]);

dReader.Close();

Får du så stadig fejl?
Avatar billede mlunde Nybegynder
26. november 2010 - 10:29 #4
Jeg får lige en fejl pga "DBNull"... det vil den ikke acceptere?
Avatar billede platik Nybegynder
26. november 2010 - 10:36 #5
Ah DBNull.Value skal der stå :-).
Avatar billede mlunde Nybegynder
26. november 2010 - 10:42 #6
Super. Det løste mit problem. Mange tak. Vil du venligst lægge et svar?
Avatar billede platik Nybegynder
26. november 2010 - 10:46 #7
Svar :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester