문제

이것은 약간 어리석은 면이 있을 수 있지만 DataTable의 내용(알 수 없는 열, 알 수 없는 내용)을 텍스트 이메일을 통해 보내야 합니다.기본 아이디어는 행과 열을 반복하고 .ToString()을 사용하여 모든 셀 내용을 StringBuilder로 출력하는 것입니다.

하지만 포맷은 큰 문제입니다.이것을 텍스트 형식으로 "읽을 수 있는" 모양으로 만드는 방법에 대한 팁/아이디어가 있습니까?

각 셀에 빈 공간을 "패딩"할 생각이지만 일부 셀을 여러 줄로 분할해야 하므로 StringBuilder 접근 방식이 약간 지저분해집니다(첫 번째 열의 두 번째 텍스트 줄이 첫 번째 열 뒤에 오기 때문입니다). 마지막 열의 텍스트 줄 등)

도움이 되었습니까?

해결책

데이터 테이블을 HTML 테이블로 변환하고 HTML 메일을 보내는 것이 대안이 될까요?클라이언트가 지원한다면 수신 측에서는 훨씬 더 좋을 것입니다.

다른 팁

이것은 정말 끔찍한 해결책처럼 들리지만 다음과 같이 작동할 수도 있습니다.

DataTable 내용을 DataGrid/GridView(ASP.NET으로 가정)로 렌더링한 다음 이를 화면 스크랩합니다.

지저분해질 거라고 말했어요.

먼저 각 열의 최대 크기를 가져옵니다.이렇게 하면 우편번호가 포함된 varchar(255) 열이 너무 많은 공간을 차지하지 않습니다.

한 줄을 분할하는 대신 전체 테이블을 분할할 수도 있습니다.테이블의 오른쪽 부분 전체를 두 번째 스트링 빌더에 넣고 첫 번째 테이블 아래에 놓습니다.

수신자가 테이블을 스프레드시트로 가져올 수 있도록 쉼표로 구분된 텍스트를 생성하는 옵션을 사용자에게 제공할 수도 있습니다.

데이터 테이블을 반복하여 HTML 이메일로 보냅니다. 데이터 테이블에서 html 테이블 생성 및 이메일 본문으로 보내기.

이 작업을 위해 특별히 사용자 정의 포맷터를 작성하여 이 작업을 수행했습니다.코드의 길이는 약 120~130줄이므로 여기에 답변으로 게시해야 할지 모르겠습니다(주제에 .cs 파일을 첨부하는 기능이 있으면 좋을 것 같습니다!).

어쨌든, 이에 관심이 있는 사람이 있으면 알려주시면 코드를 제공하겠습니다.

형식을 잘 지정해야 합니까? 아니면 자동화된 시스템이 상대방의 메일 메시지를 수신하게 됩니까?후자의 경우 데이터 테이블의 .WriteXml() 메서드를 사용하세요.

다음과 같이 할 수 있습니다(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()

자원.

아니면 생성할 수도 있습니다. CSV DataTable의 파일입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top