Datenbankinhalt formatiert in eine Richtextbox ausgeben.

05/23/2014 22:14 Black Tiger ツ#1
Edit: Ok ich habs, hab zwar keine Ahung wieso, aber ein "@" hilft weiter:
Code:
 SqlConnection con = new SqlConnection();
            con.ConnectionString = @"Data Source=(LocalDB)\v11.0;
                                    AttachDbFilename=|DataDirectory|KcalDB.mdf;
                                    Integrated Security=True;
                                    Connect Timeout=30";

            con.Open();
            SqlCommand Command = new SqlCommand("SELECT * FROM KcalDB WHERE ID = '1'", con);
            SqlDataReader reader = Command.ExecuteReader();
            while (reader.Read())
            {
                String Name= reader.GetString(1);
                String Kilokalorien = reader.GetString(2);
                //...
this.RTB.Rtf = 
@"{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}{\f1\fnil\fcharset0 Calibri;}}
{\colortbl ;\red79\green129\blue189;}
{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\nowidctlpar\qc\cf1\b\f0\fs28 "+Name+@"\par
\cf0\lang7\b0\f1\fs22\par
...


Hallöchen :P
Ich bin ein C#-Neuling und wollte mir ein Fitness-tool basteln. Leider gibt es ein Problem, auf das ich durch bloßes googlen nicht auf eine Lösung gekommen bin. Vielleicht hab ich auch nicht richtig gesucht.

Ich habe ca. 6200 Tabellen wie z.B. den hier einzutragen:


Momentan benutze ich einfach Wordpad und Gimp um eine .RTF-Datei zu erzeigen. Dannach füge ich das Ganze mit einem Event-Handler über


Code:
private void apfelChutneyToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.SystemSound_Klick.Play();
            this.RTB.Rtf = Resources.kl_apfel_chutney; //RTB = Richtextbox
        }
in das Projekt ein. Das Ganze sieht dann so aus:


Nun ergeben sich folgende Nachteile:

- Multiplexe Suchanfragen sind nicht - bis auf Weiteres - möglich.
- Es ist relativ unübersichtlich
- Es verbraucht mehr Platz

Ich weiß, wie ich eine Datenbank in mein Projekt einfüge, aber nicht wie ich diese geordnet ausgeben kann.
05/29/2014 20:49 Terreox#2
Die Erklärung, warum das ohne @ nicht funktioniert ist einfach:
Es gibt sogenannte Escapesequenzen in C#.
Diese können verschiedene Effekte hevorrufen, z.B. erzeugt man mit \n eine neue Zeile oder mit \t eine Tab-Einrückung.

Eine Escapesequenz fängt immer mit einem \ und darauf folgt dann ein gewisser Code.

Wenn du in deinen Strings ein \ hast, dann versucht der Compiler eine Escapesequenz zu erkennen.
Wird keine passende Sequenz gefunden, dann beschwert sich der Compiler.

Du kannst Escapesequenzen auf 2 Weisen umgehen:
1.) Man ersetzt das \ durch ein \\. \ wäre der Beginn einer Escapesequenz und \\ ist die Escapesequenz um ein einzelnes \ darzustellen.
2.) Du setzt ein @ vor den String. Damit werden Escapesequenzen ignoriert und dein String wird so ausgegeben, wie du ihn initialisiert hast.

Beispiel:
Code:
Console.WriteLine("Hello\nWorld");
resultiert in der Ausgabe:
Code:
Hello
World
Code:
Console.WriteLine(@"Hello\nWorld"); oder
Console.WriteLine("Hello\\nWorld");
resultiert in der Ausgabe:
Code:
Hello\nWorld
Mehr zu Escapesequenzen: [Only registered and activated users can see links. Click Here To Register...]


Aber mal eine andere Frage:
Was genau versuchst du in deinem Programm?

Soweit ich das verstanden habe, hast du eine Datenbank angelegt, in der verschiedene Produkte mit Nährwerten, Inhaltsstoffen, etc. eingetragen sind und möchtest diese dann in einem Programm anzeigen.
Sollte meine Annahme so richtig sein frage ich mich, warum du den Umweg über Wordpad + Gimp nimmst bzw was du überhaupt damit machst?
05/29/2014 22:57 Black Tiger ツ#3
Das war nur testweise :)
Ne Wordpad und Gimp brauch ich natürlich nicht mehr xD
Alle Daten befinden sich ein einer Datenbank.
Hab mittlerweile eine völlig automatisch erzeugte Piechart-bmp, welche durch eine paar Funktionen in ein passendes format gewrapped und dann eingefügt wird. Brauche eigentlich nur noch die ID abzufrufen:

Code:
 private void anisToolStripMenuItem_Click(object sender, EventArgs e)
        {
            add_Nutrition(20);
        }
[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]

Danke für die Aufklärung was das "@" bewirkt :)