Question

Cela peut être un peu sur le côté idiot de choses, mais j'ai besoin d'envoyer le contenu d'un DataTable (inconnu colonnes, inconnu contenu) par l'intermédiaire d'un texte de l'e-mail.L'idée de base est de faire une boucle sur les lignes et les colonnes et de sortie de tous les contenus de cellules dans un StringBuilder à l'aide .ToString().

Le formatage est un gros problème cependant.Des conseils et des idées sur la façon de le rendre "lisible" dans un format de texte ?

Je suis en train de penser sur le "remplissage" de chaque cellule avec des espaces vides, mais j'ai aussi besoin de partager certaines cellules sur plusieurs lignes, ce qui rend le StringBuilder approche un peu brouillon ( parce que la deuxième ligne de texte à partir de la première colonne qui vient après la première ligne de texte dans la dernière colonne,etc.)

Était-ce utile?

La solution

Serait la conversion de la datatable à un tableau HTML et envoi HTML-mail être une alternative?Que ferait il est beaucoup plus agréable sur la fin de réception si leur client prend en charge.

Autres conseils

Cela sonne comme un vraiment horrible solution, mais il pourrait peut-être marcher:

Le rendu de la Table de données contenu dans un DataGrid/GridView (en supposant que ASP.NET) et ensuite l'écran gratter que.

Je vous l'ai dit, il serait malpropre.

Obtenir la taille maxi pour chaque colonne de la première.De cette façon, un varchar(255) de la colonne contenant les codes postaux ne prendra pas trop de place.

Peut-être que vous pouvez diviser la table au lieu de la division des lignes simples.Mettre le remplir dans la partie droite de la table dans une deuxième stringbuilder et le mettre en dessous de la première table.

Vous pouvez également donner à l'utilisateur la possibilité de créer texte délimité par des virgules, de sorte que le récepteur peut importer la table dans une feuille de calcul.

Boucle à travers le datatable et l'envoyer comme e-mail en HTML - la génération de code html table de datatable & de l'envoyer dans le corps de l'email.

J'ai eu ce travail par l'écriture d'une mise en forme personnalisée spécifiquement pour cette tâche.Le code est d'environ 120 à 130 lignes de long, donc je ne sais pas si je dois poster ici comme une réponse (peut-être une fonctionnalité pour joindre .cs des fichiers sur un sujet serait une bonne ideea!) .

De toute façon, si quelqu'un est intéressé à présent, laissez-moi savoir et je vais vous donner le code.

Est-il besoin d'être formaté bien, ou la volonté d'un système automatisé de ramasser le message sur l'autre extrémité?Si ce dernier, il suffit d'utiliser la datatable est .WriteXml() la méthode.

Vous pouvez faire qch comme ça (si 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()

Ressources.

Ou vous pouvez même générer un CSV fichier à partir de votre DataTable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top