2008-09-10 14 views
2

Dies könnte ein wenig auf der dummen Seite der Dinge sein, aber ich muss den Inhalt einer DataTable (unbekannte Spalten, unbekannter Inhalt) über eine Text-E-Mail senden. Grundidee ist es, Zeilen und Spalten zu durchlaufen und alle Zelleninhalte mit .ToString() in einen StringBuilder auszugeben.DataTable zu lesbaren Textstring

Formatierung ist jedoch ein großes Problem. Irgendwelche Tipps/Ideen, wie man das in einem Textformat "lesbar" macht?

Ich denke über "Auffüllen" jeder Zelle mit leeren Leerzeichen, aber ich muss auch einige Zellen in mehrere Zeilen aufteilen, und dies macht den StringBuilder Ansatz ein wenig unordentlich (weil die zweite Zeile von Text aus der ersten Spalte kommt nach der ersten Textzeile in der letzten Spalte usw.)

Antwort

1

Wäre eine Konvertierung der Datentabelle in eine HTML-Tabelle und das Senden von HTML-Mail eine Alternative? Das würde es auf der Empfängerseite viel schöner machen, wenn ihr Kunde es unterstützt.

1

Dies wird wie eine wirklich schreckliche Lösung klingen, aber es könnte funktionieren:

den Datatable Inhalt in ein Datagrid/Gridview (vorausgesetzt, ASP.NET) übertragen und dann das Bildschirm kratzen.

Ich sagte dir, es wäre chaotisch.

+0

Sie müssen nicht screenen - verwenden Sie einfach die RenderControl-Funktion für einen HtmlWriter. – samjudson

+0

Genau meine Gedanken zu diesem einen Sam! –

+0

Render-Steuerelement wird Ihnen perfekte HTML das ist das ist die Lösung. –

1

Erhalten Sie zuerst die maximale Größe für jede Spalte. Auf diese Weise nimmt eine varchar (255) -Spalte, die Postleitzahlen enthält, nicht zu viel Platz in Anspruch.

Vielleicht können Sie die gesamte Tabelle aufteilen, anstatt einzelne Zeilen zu trennen. Legen Sie den kompletten rechten Teil der Tabelle in einen zweiten Zeichenfolgengenerator und legen Sie ihn unter die erste Tabelle.

Sie können dem Benutzer auch die Option zum Erstellen von kommagetrennten Texten geben, damit der Empfänger die Tabelle in eine Tabelle importieren kann.

-2

Sie können smth wie dies tun (wenn VB):

Dim Str As String = "" 
    'Create File if doesn't exist 
     Dim FILE_NAME As String = "C:\temp\Custom.txt" 
     If System.IO.File.Exists(FILE_NAME) = False Then 
      System.IO.File.Create(FILE_NAME) 
     End If 

     Dim objWriter As System.IO.StreamWriter 
     Try 
      objWriter = New System.IO.StreamWriter(FILE_NAME) 
     Catch ex As System.IO.IOException 
      MsgBox("Please close the file: (C:\temp\Custom.txt) before proceeding" & vbCrLf & ex.Message.ToString, MsgBoxStyle.Exclamation) 
      objWriter = Nothing 
      Err = True 
     End Try 


'I assume you know how to write to text file. 
'Say my datagridview is named "dgrid" 

Dim x,y as integer 

For x = 0 to dgrid.rows.count -1 
    For y = 0 to dgrid.columns.count - 1 
     Str = dgrid.Rows(x).Cells(y).Values & " " 
    Next y 
Next x 

objWriter.Close() 

Resource. Sie können auch eine CSV Datei von Ihrer DataTable generieren.

0

Ich habe das funktioniert durch Schreiben eines benutzerdefinierten Formatierer speziell für diese Aufgabe. Der Code ist ungefähr 120-130 Zeilen lang, also weiß ich nicht, ob ich es hier als Antwort posten sollte (vielleicht wäre ein Feature, um .cs-Dateien an ein Thema anzuhängen, eine gute Idee!).

Wie auch immer, wenn jemand interessiert ist, lass es mich wissen und ich werde den Code bereitstellen.

0

Muss es schön formatiert werden, oder wird ein automatisiertes System die Mail-Nachricht am anderen Ende abholen? Wenn Letzteres verwendet wird, verwenden Sie einfach die .WriteXml() -Methode des Datentabellen.