Entwickler-Ecke

ASP.NET und Web - Bild aus SQL Datenbank in dynamische Tabelle einfügen


Svenni9991 - Mo 06.01.14 16:05
Titel: Bild aus SQL Datenbank in dynamische Tabelle einfügen
Hallo,

wieder einmal benötige ich Hilfe. Nachdem ich nach langer Suche im Internet schon vieles ausprobiert habe, jedoch alles vergeblich war, wende ich mich nun an euch.

Ich erstelle momentan ein Intranet mit ASP.NET und will auf der Startseite die News generieren.
Dies mache ich mit einer Tabelle, welche die Datensätze aus der Datenbank "abklappert".

Soweit klappt auch alles, das Datum, der Tilte, der Text und das Fotokommentar werden richtig angezeigt, nur das richtige Format des Bildes bekomme ich nicht hin und anschließend das Einfügen in die variable Tabelle.

Der Code dazu sieht wie folgt aus:

Erst einmal eine Methode die im Hauptcode genutzt wird:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
public void fillNewsList()
        {
            String text;
            SqlConnection myCon = new SqlConnection("Server=ME-SQL\\datenbank;Database=Intranet;User ID=User;Password=Password;");

            this.newsList = new List<News>();

            try
            {
                myCon.Open();

                //Restliche Daten aus tblNews auslesen
                SqlCommand myCmd = new SqlCommand("SELECT * FROM [dbo].[tblNews] ORDER BY [dbo].[tblNews].[idNews] DESC", myCon);
                SqlDataReader myReader = myCmd.ExecuteReader();

                DateTime heute = DateTime.Now;

                while (myReader.Read())
                {
                    News neues = new News();

                    if (!DBNull.Value.Equals(myReader["Text"]))
                    { text = myReader["Text"].ToString(); }
                    else
                    { text = " "; }

                    neues.setNews(DateTime.Parse(myReader["Datum"].ToString()), myReader["Titel"].ToString(), myReader["Text"].ToString(), myReader["Kommentar"].ToString());
                    neues.setFile( ); //Hier soll das Bild aus der Datenbank gezogen werden das im byte[] Format in der Datenbank hinterlegt ist

                    newsList.Add(neues);
                }
                myReader.Close();
            }
            catch (Exception ex)
            {
                ex.ToString();
            }
            myCon.Close();
        }


Nun der Hauptcode:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
public void createOverView()
        {
            Controller ctr = new Controller();
            NewsOverView.Controls.Clear();
            List<News> neues;

            //Liste wird mit Daten aus der Datenbank gefüllt
            ctr.fillNewsList();
            neues = ctr.getNewsList();

            int tblRows = ctr.getNewsList().Count;

            Table tbl = new Table() { };

            //Erstellen des Controls zur Darstellung der Tabelle
            NewsOverView.Controls.Add(tbl);
            TableRow header = new TableRow();
            //Erstellen der zwei nötigen HeaderZelle (2 Spalten)
            TableHeaderCell hDatum = new TableHeaderCell() { Text = "", CssClass = "thIDnews" };
            TableHeaderCell hDaten = new TableHeaderCell() { Text = "", CssClass = "thDatennews" };

            //Hinzufügen der HeaderCells zum Gesamtheader
            header.Cells.Add(hDatum);
            header.Cells.Add(hDaten);

            //Der Header wird zur Tabelle hinzugefügt
            tbl.Rows.Add(header);

            int zeile = 1;

            for (int i = 0; i < tblRows; i++)
            {
                TableRow tr = new TableRow();

                zeile++;

                //Die weiteren Zeilen werden erstellt
                //In der Zelle Datum wird sofort das Datum eingefügt. Danach folgen in dieser Spalte keine weiteren Informationen
                TableCell datum = new TableCell() { Text = neues[i].getDatum().ToString("MM.yyyy"), CssClass = "AusrDatum" };
                //Die Zelle Daten wird erst einmal generiert, während in den nächsten Schritten nach und nach die Informationen hinzugefügt werden
                TableCell daten = new TableCell() { };
                
                Table tblData = new Table() { CssClass = "tblDataNews" };

                //Hinzufügen des Titels
                TableRow tr2 = new TableRow();
                TableCell titel = new TableCell() { Text = neues[i].getTitel().ToString(), CssClass = "AusrTitel" };
                tr2.Cells.Add(titel);

                //Hier soll nun das Bild eingefügt werden
                TableRow tr3 = new TableRow();
                TableCell foto = new TableCell() { Text =  }; //Speziell hier (siehe vorherige und folgende TableRows)
                tr3.Cells.Add(foto);

                //Hinzufügen des Kommentares zu dem Bild
                TableRow tr4 = new TableRow();
                TableCell kommentar = new TableCell() { Text = neues[i].getKommentar().ToString(), CssClass = "AusrKommentar" };
                tr4.Cells.Add(kommentar);

                //Der Inhalt wird, wenn vorhanden, eingefügt
                TableRow tr5 = new TableRow();
                TableCell inhalt = new TableCell() { Text = neues[i].getText().ToString(), CssClass = "AusrText" };
                tr5.Cells.Add(inhalt);

                tblData.Rows.Add(tr2);
                tblData.Rows.Add(tr3);
                tblData.Rows.Add(tr4);
                tblData.Rows.Add(tr5);

                daten.Controls.Add(tblData);

                tr.Cells.Add(datum);
                tr.Cells.Add(daten);

                tbl.Rows.Add(tr);
            }
        }


Wie schon im Code zwischen den Zeilen als Kommetar erwähnt befindet sich das Bild als byte[] in der Datenbank.

Hier noch einmal ein Foto wie die News dann aussehen.
Beispiel_News

Schon einmal vielen Dank im vorraus
Svenni9991

PS: Ebenfalls habe ich das Problem das wenn ich HTML-Text mit Formatierungen wie z.B. <b> hinzufügen will er mir folgende Fehlermeldung ausgibt: "Ein möglicherweise gefährlicher Request.Form-Wert wurde vom Client (GridView1$ctl02$ctl04="...ac, enim. <br />Aliquam lorem ...") entdeckt." Das gleiche passiert wenn ich die Einträge der Datenbank in einem GridView ändern und aktualisieren will. Ich habe es mit Encode und Decode schon versucht nur es hat nie geklappt. Hat da evtl. noch jemand einen Tipp?