2016-03-22 8 views
0

Ich habe einige Fahrzeuginformationen, die ich in einer E-Mail senden möchte. Ich habe alle Code funktioniert, aber die Informationen sind ein Problem. Jedes Fahrzeug hat eine Checkliste und diese Checkliste wird per E-Mail verschickt. Also gehe ich durch die Liste und erhalte den Fehler und den Kommentar.String auf ein festes Leerzeichen setzen?

foreach (var item in chkList.CheckItems) 
     { 
      if (item.Defect == true) 
      { 
       defect += string.Format("{0,-40} {1}\n", item.ItemTitle, item.Comment); 
      } 
     } 

     if (hasDefect == true) 
     { 
      Utils.ChecklistSendMail("Checklist", ToAddresses.Split(';'), 
       "Vehicle Reg: " + reg + "\n" + 
       "Checklist No: " + chkList.CheckListNo + "\n"+ 
       "Date: " + ChecklistDate.ToShortDateString() + "\n" + 
       "Defects:       Comments: " + "\n" + 
       defect); 
     } 

E-Mail sieht dann wie folgt aus:

Vehicle Reg: XLZ 8194 
Checklist No: 0 
Date: 22/03/2016 
Defects:     Comments: 
Vehicle Secure     comment1 
Brakes      comment2 

ich die Mängel wollen und die Kommentare wie folgt dargestellt werden:

Defects:      Comments: 
Vehicle Secure    comment1 
Brakes      comment2 

Da Vehicle Secure länger als Brakes der Kommentar sein wird weiter geschoben. Aber gibt es eine Möglichkeit, den String an einer bestimmten Position zu fixieren, egal wie lange das erste Wort ist?

EDIT

Code sieht nun wie folgt aus:

string defect = ""; 
     string comment = ""; 
     string aheading = "Defects:"; 
     string bheading = "Comments:"; 
foreach (var item in chkList.CheckItems) 
     { 
      if (item.Defect == true) 
      { 
       defect += item.ItemTitle; 
       comment += item.Comment; 
      } 
     } 

     string result = aheading.PadRight(20, ' ') + bheading.PadRight(20, ' ') + Environment.NewLine + 
      defect.PadRight(20, ' ') + comment.PadRight(20, ' ') + Environment.NewLine; 

Aber die Ausgabe sieht wie folgt aus:

Defects:   Comments:    
Vehicle SecureBrakestest1test2 
+1

Sie können Tabs verwenden: '„\ t“', aber unter Verwendung von HTML in Ihrer E-Mail wäre besser. – user1666620

+1

Ich denke, die E-Mail im HTML-Format zu senden wäre die beste Lösung – Pikoh

+0

@ user1666620 sein, wie würde ich html hier benutzen? – user123456789

Antwort

1

Try and verwenden String padding mit '' als char

public string PadRight(
int totalWidth, 
char paddingChar) 

Dieses Verfahren würde die Länge der Zeichenfolge mit dem gewählten char vervollständigen. indem Sie die maximale Länge der Zeichenfolge angeben und die verbleibende Länge durch "" (Leerzeichen) ersetzen. Sie können die Zeichenfolgen immer ausrichten lassen.

Lesen Sie mehr über PadRight oder PadLeft

string Defects ="Example" Defects.PadRight(20," ");

Ergebnis: "Example "

Edit: Beispielcode.Bitte haben Sie einen Blick auf diesen Code und überprüfen, was Sie falsch

 string aheading = "Defects:"; 
     string bheading ="Comments:"; 
     string b = "Vehicle Secure"; 
     string bComment = "My Comment value"; 
     string c = "Brakes"; 
     string cComment = "My Comment value"; 


    string result= aheading.Trim().PadRight(20,' ')+bheading.Trim().PadRight(20,' ')+ Environment.NewLine + 
     b.Trim().PadRight(20, ' ') + bComment.Trim().PadRight(20, ' ') + Environment.NewLine + 
     c.Trim().PadRight(20,' ')+cComment.Trim().PadRight(20,' ')+Environment.NewLine ; 

     Console.WriteLine(result); 

bearbeiten tun: Antwort basierend auf dem Code, den Sie Veröffentlichten

 string aheading = "Defects:"; 
     string bheading = "Comments:"; 


     string result = aheading.PadRight(20, ' ') + bheading.PadRight(20, ' ') + Environment.NewLine ; 


     foreach (var item in chkList.CheckItems) 
     { 
      if (item.Defect == true) 
      { 
       string result += item.ItemTitle.Trim().PadRight(20,' ') + item.ItemTitle.Trim().PadRight(20,' ') + Environment.NewLine ; 

      } 
     } 

     Console.WriteLine(result); 
+0

Ich habe 'defect.PadRight (40,‚‚);' zu meinem Code, aber es hat nicht die Linie über – user123456789

+0

Hallo bewegen, versuchen und das ersetzen‘‘ mit ‚*‘ nur zum Zwecke der Prüfung und lassen Sie mich wissen was Sie –

+0

Hinzufügen der '*' verursacht den Fehler: zu viele Zeichen in Zeichenliteral – user123456789

3

Wenn Sie wirklich diese mit Leerzeichen tun wollen, müssen Sie um das Etikett mit den meisten Zeichen und den gewünschten Platz danach zu bestimmen. Dies erstellt eine Gesamtzahl von Zeichen. Von diesem subtrahieren Sie die Anzahl der Zeichen des Labels, um die Anzahl der Leerzeichen zu erhalten, die für die Ausrichtung des Werts erforderlich sind.

Sie könnten jedoch nur <table> oder einen anderen HTML-Code verwenden.

Eine mögliche, schnelle und schmutzige Lösung würde erfordern, dass Sie den HTML-Code als Teil Ihres Codes generieren. Ich rate dringend von einer selbst entwickelten HTML-Generator-Logik ab. Die an der E-Mail beteiligten Daten werden immer komplexer. Dies führt zu Mischcode, der die Daten für die Vorlage erhält und das HTML erstellt, was für das Debugging schmerzhaft ist. Es gibt auch viele HTML-Templating-Lösungen da draußen. Sie würden wirklich nur das Rad neu erfinden, um technische Schulden und die Wartung von mehr Code zu übernehmen.

Eine bessere Lösung wäre etwas wie MvcMailer verwenden und eine HTML-Vorlage erstellen. Sie übergeben dann die Vorlage und ein Kontextobjekt an die Engine, um den resultierenden HTML-Code zu rendern.

+0

gibt es eine Möglichkeit, die Zeichenfolge in HTML oder etwas ähnliches zu wickeln? – user123456789

+0

Ich glaube, ich verstehe, was Sie fragen. Ich habe meine Antwort aktualisiert. –

+0

ok danke für die Antwort. Wenn ich eine '

' verwende, wie würde ich das tun? Können Sie ein Beispiel geben, wie ich html für den Code in meiner Frage verwenden würde? – user123456789

Verwandte Themen