Avatar billede stinejh1980 Nybegynder
21. april 2009 - 08:36 Der er 5 kommentarer og
1 løsning

Vise billeder fra database

Jeg har en Tabel (Link_Tbl) hvor jeg indsætte billeder.
Kolonner:
LinkID
LinkTitle
Href
Image

For at vise billedet har jeg følgende side:
Image.aspx

        Dim type As String
        type = "jpg"
        Dim strTable As String = Request.QueryString("Tbl")
        Dim strImageID As String = Request.QueryString("id")
        Dim conn As String = System.Configuration.ConfigurationManager.AppSettings("WebCOnn")
        MyConnection = New SqlConnection(conn)

        Dim sSQL As String = "SELECT * FROM Link_Tbl Where LinkID=" & strImageID
        MyCommand = New SqlCommand(sSQL, MyConnection)
        Try
            MyConnection.Open()
            Dim myDataReader As SqlDataReader
            myDataReader = MyCommand.ExecuteReader(CommandBehavior.CloseConnection)
            Do While (myDataReader.Read())
                Response.BinaryWrite(myDataReader.Item("Image"))
            Loop
            MyConnection.Close()
        Catch SQLexc As SqlException
            Response.Write(SQLexc.ToString)
        End Try


Afhængig af hvor mange links brugeren har tilføjet bliver de loaded dynamisk på siden links.aspx:
    Public Sub FillInfo()
        MyTabel = New Table

        MyDS = New DataSet
        MyCommand = New SqlCommand
        MySQL = "SELECT * from Link_Tbl;"
        MyCommand.CommandText = MySQL
        MyCommand.Connection = MyConnection
        MyReader = MyCommand.ExecuteReader
        While MyReader.Read
            TblRow = New TableRow
            TblCell = New TableCell
            If Not IsDBNull(MyReader("Image")) Then TblCell.Text = "[Mit dynamiske billede]"
            TblRow.Cells.Add(TblCell)
            MyTabel.Rows.Add(TblRow)

            TblRow = New TableRow
            TblCell = New TableCell
            If Not IsDBNull(MyReader("LinkTitle")) Then TblCell.Text = MyReader("LinkTitle")
            TblRow.Cells.Add(TblCell)
            MyTabel.Rows.Add(TblRow)

            TblRow = New TableRow
            TblCell = New TableCell
            If Not IsDBNull(MyReader("Href")) Then TblCell.Text = _
            "<a href='http://" + MyReader("Href") + "' Target='_blank'> " + MyReader("Href") + "</a>"
            TblRow.Cells.Add(TblCell)
            MyTabel.Rows.Add(TblRow)

        End While
        MyReader.Close()

        'MyTabel.Attributes.Add("Border", 1)
        PHInfo.Controls.Add(MyTabel)

        MyConnection.Close()
    End Sub


Hvis jeg bruger i frame virker det.
"<iframe src ='image.aspx?id=" & ImageID & "' height='100' frameborder='0'> </iframe>"

Men der er hverken kønt eller praktisk.

I min admin datagrid til gør jeg følgende for at vise billedet:
        Dim img As System.Web.UI.WebControls.Image

        If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then
            Dim myID As Label
            myID = CType(e.Item.FindControl("LblID"), Label) 'DGLinks.DataKeys(e.Item.ItemIndex)
            img = CType(e.Item.FindControl("imgimage"), System.Web.UI.WebControls.Image)
            img.ImageUrl = "LinkDisplayed.aspx?id=" & myID.Text
            'img.Width = Unit.Pixel(200)
            img.Height = Unit.Pixel(100)

            Dim mybutton As LinkButton
            mybutton = CType(e.Item.FindControl("BtnDelete"), LinkButton)
            mybutton.Attributes.Add("onClick", "return confirm('Are you sure you want to delete this? Click OK to delete or Cancel to keep.');")
        End If

Jeg kunne godt tænkte mig at loade billedet dynamisk på lignende måde i min FillInfo() funktion.

Kan nogen hjælpe?
Avatar billede aaberg Nybegynder
21. april 2009 - 09:33 #1
I stedet for at bruge en iframe, kan du vel bruge en <img> tag!?

"<img alt="some text" src="Image.aspx?id=" & ImageID & " />"

Eller, misforstod jeg noget nu?
Avatar billede stinejh1980 Nybegynder
21. april 2009 - 09:37 #2
Det har jeg forsøgt.

"Wrong input format"

Jeg prøver lige igen for en sikkerhedsskyld. Jeg har ikke sat ImageID som variable.
Avatar billede stinejh1980 Nybegynder
21. april 2009 - 09:59 #3
DET LYKKEDES - AABERG_CC SMID ET SVAR.

Her er resultatet - hvis andre skulle have brug for lignende.

    Public Sub FillInfo()
        MyTabel = New Table

        MyDS = New DataSet
        MyCommand = New SqlCommand
        MySQL = "SELECT * from Link_Tbl;"
        MyCommand.CommandText = MySQL
        MyCommand.Connection = MyConnection
        MyReader = MyCommand.ExecuteReader
        While MyReader.Read
            Dim ImageID As String = MyReader("LinkID")

            TblRow = New TableRow
            TblCell = New TableCell
            TblCell.Text = "<img alt='Image_" & ImageID & "' src='Image.aspx?id=" & ImageID & "' />"
            TblRow.Cells.Add(TblCell)
            MyTabel.Rows.Add(TblRow)

            TblRow = New TableRow
            TblCell = New TableCell
            If Not IsDBNull(MyReader("LinkTitle")) Then TblCell.Text = MyReader("LinkTitle")
            TblRow.Cells.Add(TblCell)
            MyTabel.Rows.Add(TblRow)

            TblRow = New TableRow
            TblCell = New TableCell
            If Not IsDBNull(MyReader("Href")) Then TblCell.Text = _
            "<a href='http://" + MyReader("Href") + "' Target='_blank'> " + MyReader("Href") + "</a>"
            TblRow.Cells.Add(TblCell)
            MyTabel.Rows.Add(TblRow)

        End While
        MyReader.Close()

        MyTabel.Attributes.Add("Border", 1)
        PHInfo.Controls.Add(MyTabel)

        MyConnection.Close()
    End Sub
Avatar billede aaberg Nybegynder
21. april 2009 - 10:08 #4
Et par ting...

1.
I stedet for at bruge en aspx side til at hente billedet fra databasen, bør du bruge en Generic Handler. Du ser denne i listen, inde på "Add new item". Denne har bedre performance til sådanne opgaver, end aspx side.

2.
Bruger du en generic handler, skal du override ProcessRequest metoden (Dette gør Visual Studio automatisk for dig). Denne metode får tilsendt en parameter af typen HttpContext som hedder "context". Denne context variabel, bruger du i stedet for Response propertien på din aspx side. Denne har også en ContentType property, som du kan sætte til "image/jpeg" hvis det er et jpeg billede du returnere. På denne måde vil browseren forstå at det er et billede den modtager, og du vil undgå "Wrong input format" fejlen.

Se eventuelt dette eksempel (Skrevet i C#, jeg fandt ikke lige et VB.NET eksempel!):
http://www.dotnetcurry.com/ShowArticle.aspx?ID=129&AspxAutoDetectCookieSupport=1
Avatar billede aaberg Nybegynder
21. april 2009 - 10:09 #5
Bravo!

Så blev min sidste kommentar lidt overflødig :-)  Men overvej alligevel at bruge en generic handler i stedet for en aspx side.

:-)
Avatar billede stinejh1980 Nybegynder
21. april 2009 - 10:27 #6
Når jeg har fået siden til at køre, vil jeg tilrette den med lidt mere "lækre detaljer" som denne med tiden.
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