Pergunta

Isso pode ser um pouco bobo, mas preciso enviar o conteúdo de um DataTable (colunas desconhecidas, conteúdo desconhecido) por meio de um e-mail de texto.A ideia básica é fazer um loop em linhas e colunas e gerar todo o conteúdo da célula em um StringBuilder usando .ToString().

A formatação é um grande problema.Alguma dica/ideia sobre como fazer com que isso pareça "legível" em formato de texto?

Estou pensando em "preencher" cada célula com espaços vazios, mas também preciso dividir algumas células em várias linhas, e isso torna a abordagem do StringBuilder um pouco confusa (porque a segunda linha de texto da primeira coluna vem depois da primeira linha de texto na última coluna, etc.)

Foi útil?

Solução

Converter a tabela de dados em uma tabela HTML e enviar e-mail HTML seria uma alternativa?Isso tornaria muito melhor para quem recebe se o cliente apoiasse.

Outras dicas

Isso vai parecer uma solução realmente horrível, mas pode funcionar:

Renderize o conteúdo do DataTable em um DataGrid/GridView (assumindo ASP.NET) e, em seguida, faça uma captura de tela.

Eu disse que seria uma bagunça.

Obtenha primeiro o tamanho máximo para cada coluna.Dessa forma, uma coluna varchar(255) contendo códigos postais não ocupará muito espaço.

Talvez você possa dividir a tabela completa em vez de dividir linhas únicas.Coloque toda a parte direita da mesa em um segundo stringbuilder e coloque-o abaixo da primeira mesa.

Você também pode dar ao usuário a opção de criar texto delimitado por vírgulas para que o destinatário possa importar a tabela para uma planilha.

Percorra a tabela de dados e envie-a como email HTML - gerando tabela html a partir da tabela de dados e enviando-a como corpo do email.

Eu fiz isso funcionar escrevendo um formatador personalizado especificamente para esta tarefa.O código tem cerca de 120 a 130 linhas, então não sei se devo postá-lo aqui como resposta (talvez um recurso para anexar arquivos .cs a um tópico seja uma boa ideia!).

De qualquer forma, se alguém estiver interessado nisso, me avise e fornecerei o código.

Ela precisa ser bem formatada ou um sistema automatizado captará a mensagem do outro lado?Neste último caso, basta usar o método .WriteXml() da tabela de dados.

Você pode fazer algo assim (se for 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()

Recurso.

Ou você pode até gerar um CSV arquivo do seu DataTable.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top