DataTable可读文本字符串

时间:2008-09-10 08:56:27

标签: c# formatting datatable

这可能有些愚蠢但我需要通过文本电子邮件发送DataTable(未知列,未知内容)的内容。基本思想是循环遍历行和列,并使用.ToString()将所有单元格内容输出到StringBuilder中。

格式化是一个很大的问题。有关如何使文本格式看起来“可读”的任何提示/想法?

我正在考虑用空格“填充”每个单元格,但我还需要将一些单元格拆分成多行,这使得StringBuilder方法有点混乱(因为第一列中的第二行文本来了在最后一栏的第一行文本之后,等等。)

7 个答案:

答案 0 :(得分:1)

将数据表转换为HTML表并发送HTML邮件是另一种选择吗?如果他们的客户支持它,这将使它在接收端更好。

答案 1 :(得分:1)

这听起来像是一个非常可怕的解决方案,但它可能会起作用:

将DataTable内容渲染到DataGrid / GridView(假设是ASP.NET),然后屏幕刮掉它。

我告诉过你这会很乱。

答案 2 :(得分:1)

首先获取每列的最大大小。这样,包含邮政编码的varchar(255)列不会占用太多空间。

也许您可以拆分整个表而不是拆分单行。将表格的右侧部分放在第二个字符串构建器中,并将其放在第一个表格下面。

您还可以为用户提供创建逗号分隔文本的选项,以便接收者可以将表格导入电子表格。

答案 3 :(得分:0)

循环访问数据表并将其作为HTML电子邮件发送 - generating html table from datatable & sending it as body of email

答案 4 :(得分:0)

我通过专门为此任务编写自定义格式化程序来实现此目的。代码大约是120-130行,所以我不知道是否应该在这里发布它作为答案(也许将.cs文件附加到一个主题的功能将是一个很好的想法!)。

无论如何,如果有人对此感兴趣,请告诉我,我会提供代码。

答案 5 :(得分:0)

是否需要很好地格式化,或者自动系统是否会在另一端接收邮件消息?如果是后者,只需使用数据表的.WriteXml()方法。

答案 6 :(得分:-2)

你可以这样做(如果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

或者您甚至可以从DataTable生成CSV文件。