Autor Beitrag
Dark_rider
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Sa 28.06.08 14:13 
Hi!
Ich möchte mit einer DataList (oder ähnliches) Bilder von der Datenbank anzeigen lassen. Aber, wie funktioniert das eigentlich? Der Code der DataList auf der Webseite sieht so aus:
ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
 <asp:DataList ID="DataList1" runat="server" CaptionAlign="Top" 
            DataKeyField="Bild" DataSourceID="VorlesungsSource" BackColor="#DEBA84" 
            BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3" 
            CellSpacing="2" GridLines="Both" RepeatColumns="3" RepeatDirection="Horizontal">
            <FooterStyle BackColor="#F7DFB5" ForeColor="#8C4510" />
            <ItemStyle BackColor="#FFF7E7" ForeColor="#8C4510" />
            <SelectedItemStyle BackColor="#738A9C" Font-Bold="True" ForeColor="White" />
            <HeaderStyle BackColor="#A55129" Font-Bold="True" ForeColor="White" />
            <ItemTemplate>
                Bild:
                <asp:image ID="Bildimage" runat="server" imageurl='<%# ShowImage(Eval("Bild")) %>' Width="50" Height="50" />
                
                Titel:
                <asp:Label ID="TitelLabel" runat="server" Text='<%# Eval("Titel") %>' />
                
                Datum:
                <asp:Label ID="DatumLabel" runat="server" Text='<%# Eval("Datum") %>' />
                
                Bemerkung:
                <asp:Label ID="BemerkungLabel" runat="server" Text='<%# Eval("Bemerkung") %>' />
                
            </ItemTemplate>
        </asp:DataList>


Bei dem Image rufe ich eine Methode ShowImage auf. Der C#-Code dazu sieht folgendermaßen aus:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
 public String ShowImage(object o)
    {
                
        return "http://localhost:50549/Kinderuni_v01/ShowImage.aspx?ShowImage=";
    }


Ich rufe die Seite ShowImage auf, die mir das Bild aus der Datenbank holen soll. Der Code zu der Seite sieht so aus:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
   protected void Page_Load(object sender, EventArgs e)
    {
        String value = this.Request.QueryString.Get("showImage");
        KUDBDataContext db = new KUDBDataContext();

        var fotos = (from f in db.Fotos
                     select f);

        byte[] buffer = null;

        foreach (Foto foto in fotos)
        {

            buffer = foto.Bild.ToArray();
           
        }

        Response.ContentType = "image/jpeg";
        Response.BinaryWrite(buffer);
    }


Das Problem ist jetzt, dass immer das gleiche Bild in allen Feldern angezeigt wird. Ich müsste praktisch die ID des Fotos irgendwie mit übergeben und anhand der ID das jeweilige Bild aus der Datenbank holen, oder? Aber, wenn das so ist, dann weiß ich nicht, wie ich das jetzt machen soll. Kann mir einer sagen, wie das funktioniert? Oder kennt vielleicht noch jemand eine andere Methode Bilder aus der Datenbank anzeigen zu lassen?

Danke im Voraus!
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 28.06.08 19:49 
Wäre es denn nicht um Weiten einfacher, wenn du in der DB einfach nur den Pfad zum Bild speicherst? Gerade bei Webseiten bietet sich das imHo an.
Dark_rider Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Di 01.07.08 13:39 
Hi!
Klingt eigentlich einfach, aber ich kenne mich noch nicht so gut damit aus. Wie würde das dann aussehen, konkret?

Danke im Voraus!
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 01.07.08 16:26 
Naja, du änderst den Typ deiner "Bild"-Column auf NVarChar(xyz) :gruebel: :mrgreen: . Dann musst du natürlich alle Bilder in einer geeigneten Ordnerstruktur verwalten. Wenn die Pfade in der DB schon relative sind, sollte in der .aspx dann imageurl='<%# Eval("Bild") %>' genügen.
Dark_rider Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Di 01.07.08 16:28 
Hi!
Aber müssen Bilder nicht in einem Byte-Array in der Datenbank abgespeichert werden?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 02.07.08 16:21 
Äh, ich habe doch vorgeschlagen, das eben nicht so zu machen. Natürlich könnte man es irgendwie hinbiegen, dass die URL "/Pics/1.jpg" auf den richtige DB-Eintrag umgeleitet wird und dabei auch nicht der Cache (Client & Server) versagt, aber am einfachsten ist es doch, wenn hinter jeder URL auch eine physische Datei steckt. Und die DB nur noch die Pfade enthält.