Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Textbox ignoriert \r\n - Strings kommen von Datenbank
Maffi1986
myCSharp.de - Member

Avatar #avatar-3437.gif


Dabei seit:
Beiträge: 54
Herkunft: Soest

Themenstarter:

Textbox ignoriert \r\n - Strings kommen von Datenbank

beantworten | zitieren | melden

Hallo,

irgendwie stehe ich aufm Schlauch, ich habe einen Text in einer MSSQL Datenbank, diesen lese ich in einen String ein und weise dann einer Textbox den Text zu, die Textbox zeigt den Text auch an, allerdings macht keinen Zeilenumbruch sondern zeigt \r\n an und ich versteht nicht warum. Ich hoffe das zählt nicht unter Grundlagen fragen :/

Vielen Dank im vorraus.

Maffi
Attachments
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7538
Herkunft: Waidring

beantworten | zitieren | melden

Hallo Maffi1986,

hast du schon geschaut wie der String im Debugger aussieht? In VS kannst du als Debugger-Visualizer "Text" wählen -- siehe angehängtes Bild.
Es könnte sein, dass vom SQL Server ein String in nicht erwarteter Kodierung kommt.

Multiline ist bei der Textbox auch angestellt?

Das folgende wird nichts bringen, aber eine Versuch wäre es wert:
Wenns dort richtig ist, nur in der TextBox nicht, so ersetze \r\n durch Environment.NewLine. Ob das etwas bringt bezweifle ich aber, denn unter Windows entspricht Environment.NewLine gerade \r\n.

Ebenso probiers nur mit \n.

Unter welcher Infrastruktur läuft deine Anwendung, denn bei mir (Win7 64bit, DEU, .net 4.5) gehts mit \n \r\n immer.

mfG Gü
Attachments
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
Maffi1986
myCSharp.de - Member

Avatar #avatar-3437.gif


Dabei seit:
Beiträge: 54
Herkunft: Soest

Themenstarter:

beantworten | zitieren | melden

Hallo gfoidll,

ich habe das mit Enviroment.NewLine probiert, funktion aber nicht weil es ja im String steht und durch + dazwischen gefügt wird.

So lese ich die Daten aus


string gewerbeText,privatText;
            cmd.CommandText = "Select Art,Text from fusstexte;";
            rdr = cmd.ExecuteReader();
            int i = 0;
            while (rdr.Read())
            {
                if (i==0)
                {
                    gewerbeText = Convert.ToString(rdr[1]);
                    i++;
                }
                if (i==1)
                {
                    privatText = rdr[1].ToString();
                }   
            }
            rdr.Close();
            MSSQL.Close();

Ich nutze VS Community 2015 unter Windows 10 und Windows 7. Ich verstehe auch nicht, warum er das nicht macht. Ich denke mir bleibt nix übrig als den String zu Splitten und ....."+Enviroment.NewLine+"..... einzufügen, allerdings scheint mir das nicht die beste Lösung zu sein. Eigentlich müsste das auch anders funktonieren. Multiline ist aktiviert, in der string Variable wird \r\n angezeigt. Vielleicht ist es einfach zu Spät um klar denken zu können

Vielen Dank Maffi
private Nachricht | Beiträge des Benutzers
teebeast
myCSharp.de - Member



Dabei seit:
Beiträge: 41
Herkunft: Bayern

beantworten | zitieren | melden

Hi,

also für mich schaut der Text eher nach "\\r\\n" aus. Sonst würde im Text nicht "\r\n" stehen und die Umbrüche würden einfach ignoriert werden, wenn es sich tatsächlich um ein Problem mit der Darstellung der Zeilenumbrüche handeln würde.
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von teebeast am .
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4001

beantworten | zitieren | melden

Wenn das so in der TextBox angezeigt wird, dann steht es auch so im String drin, d.h. nicht die beiden Steuerzeichen CR + LF, sondern die 4 Zeichen '\', 'r', '\' und 'n'.
Ersetze also einfach @"\r" durch "\r" und @"\n" durch "\n":


s = s.Replace(@"\r", "\r");
s = s.Replace(@"\n", "\n");
Wenn du nicht weißt, was das @ bedeutet: [FAQ] Was bedeutet das @ (=at) vor String-Literalen? Und: Wissenswertes zu Escape-Sequenzen (alternativ statt @"\" kannst du also auch "\\" schreiben).

Edit: da aber anscheinend verschiedene Zeilenumbrüche im Text vorkommen, und die Windows-TextBox nur CRLF unterstützt, müßtest du also auch noch '\n' und "\n\r" durch Enviroment.NewLine ("\r\n") ersetzen.

PS: Da schien der Datenbank-Anwendungsentwickler aber ganz schlau gewesen zu sein, daß er dort die Steuerzeichen im Text beim Eintragen in die DB ersetzt hat (oder gibt irgendein Anwender oder externes Programm den Text so ein?) ;-)
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Th69 am .
private Nachricht | Beiträge des Benutzers
Maffi1986
myCSharp.de - Member

Avatar #avatar-3437.gif


Dabei seit:
Beiträge: 54
Herkunft: Soest

Themenstarter:

beantworten | zitieren | melden

Hallo,

irgendwie funktioniert das auch nicht. Im String stehen ja die Steuerzeichen drin.

Anbei mal ein Bild wie es in der Datenbank steht.

Viele Grüße
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Maffi1986 am .
Attachments
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7538
Herkunft: Waidring

beantworten | zitieren | melden

Hallo Maffi1986,

dort stehen sie "escaped", daher die doppelten Backslash. Das hättest du nach meinem ersten Post schon feststellen können.

Wenn du nur \n hast, so sollte es gehen.
Also string.Replace("\\n", "\n").

mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
Maffi1986
myCSharp.de - Member

Avatar #avatar-3437.gif


Dabei seit:
Beiträge: 54
Herkunft: Soest

Themenstarter:

beantworten | zitieren | melden

Hallo gfoidl,

vielen Dank für die antwort, ich habe das nur Testweise so eingetragen, sowohl \ als auch \\ haben den gleichen effeckt, ich fass hier nochmal etwas detailierter zusammen

Text in der SQL Datenbank
Mit erhalt der Ware bestätige ich, dass vorgehaltene Material mein persöhnliches Eigentum war. \n Wir weisen Sie darauf hin, dass jede Tätigkeit zur Erzielung von Einnahmen zur Umsatzsteuer- \\n und Einkommenssteuerpflicht führen kann. Klären Sie dies mit Ihrem Finazamt oder Steuerberater


Im Text steht sowohl \ als auch \\, beides funktioniert leider nicht
So lese ich den Text aus, und füge Ihn zur Textbox hinzu.


            cmd.CommandText = "Select Text from fusstexte WHERE Art=Privat;";
            rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                    gewerbeText = Convert.ToString(rdr[1]);
            }
            rdr.Close();
            MSSQL.Close();
            tb_Freitext.Text = gewerbeText;            


Im Anhang dann das ergbnis.

Viele Grüße und vielen Dank

Maffi
Attachments
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15703
Herkunft: BW

beantworten | zitieren | melden

IIRC musst Du hier Replace mit Environment.NewLine verwenden.
zB

 tb_Freitext.Text = gewerbeText.Replace("\n", Environment.NewLine);

Könnte in diesem Fall natürlich auch \\n sein, das ersetzt werden muss.
Funktioniert jedenfalls bei mir.
private Nachricht | Beiträge des Benutzers
Maffi1986
myCSharp.de - Member

Avatar #avatar-3437.gif


Dabei seit:
Beiträge: 54
Herkunft: Soest

Themenstarter:

beantworten | zitieren | melden

Vielen Dank Abt,

hat super funktioniert.

Viele Grüße

Maffi
private Nachricht | Beiträge des Benutzers