2010-06-15 3 views
0

WPF DataGrid를 텍스트 파일과 .csv 파일로 내보내는 간단한 방법이 있습니까? 일부 검색을했는데 그렇게 할 간단한 DataGrid 메서드가 있음을 알 수 없습니다. DataGrid의 ItemsSource를 사용하여 작업하는 (간신히) 뭔가가 있습니다. 필자의 경우, 이것은 구조체의 배열이다. 나는 StreamWriters와 StringBuilders (사용 가능한 세부 사항) 뭔가를하고 기본적으로 가지고WPF DataGrid를보기 좋은 형식의 텍스트 파일로 내 보냅니다. 텍스트 파일을 쉽게 읽을 수 있어야합니다.

StringBuilder destination = new StringBuilder(); 
destination.Append(row.CreationDate); 
destination.Append(seperator); // seperator is '\t' or ',' for csv file 
destination.Append(row.ProcId); 
destination.Append(seperator); 
destination.Append(row.PartNumber); 
destination.Append(seperator); 

내가 (루프)에 배열의 각 구조체에 대해이 작업을 수행합니다. 이것은 잘 작동합니다. 문제는 텍스트 파일을 읽는 것이 쉽지 않다는 것입니다. 동일한 C 럼 내에서 데이터의 길이가 다를 수 있습니다. 2007-03-03 234,238,423,823 823,829,923 2007-03-03 66 : 2007-03-03 234,238,423,823 823,829,923 2007-03-03 66 99 그리고 물론 , 내가 뭔가를 얻을 : 내가 좋아하는 무언가를보고 싶습니다 99

내가 탭 구분 기호를 사용하고 있다는 것은 놀라운 일이 아니지만 나는 더 나은 결과를 얻기를 바랍니다. DataGrid에서 쉽게 읽을 수 있습니다! 나는 물론 공백으로 짧은 값을 덧붙이는 논리를 사용할 수도 있지만 꽤 엉망이된다. 더 좋은 방법이있을 거라 생각 했어. 나는 또한 이것이 공통적 인 문제이고 아마도 .NET 클래스 자체 내에서 해결되기 전에 아마도 해결되었다고 생각한다.

감사합니다.

답변

1

가능한 한 WYSIWYG로 목표가 있다고 가정합니다. 그 경우 나는

  1. 모든 DataGridRows를 반복하고 각 DataGridCell에 표시되는 데이터를 포함하는 문자열 []을 만듭니다. 대부분의 DataGridColumn 유형에는 쉽습니다. DataGridTemplateColumn의 경우 바인딩을 사용하고 .ToString()을 변환해야합니다.
  2. 나는 각 열의 최대 문자열 길이를 추적합니다.

다음 단계는 수출 유형에 따라 다릅니다

  • 을 그때 그들 사이의 쉼표 따옴표 안에 각 문자열 []에있는 모든 문자열을 추가하고이를 쓰는 것 CSV 내보내기 위해.
  • 일반 텍스트 내보내기의 경우 각 문자열 [1]에 공백이 채워져있는 모든 문자열을 해당 열의 최대 문자열 길이에 추가하고 써 넣습니다.

실제 DataGridRow, DataGridCell 및 DataGridColumn 개체를 사용하는 이유는 최종 사용자가 보는 것과 정확히 일치하는 것입니다. 예를 들어, 숨겨진 열을 건너 뛰고 바인딩에서 문자열 형식을 적용하고, 필터링/그룹화/정렬 등을 수행 할 수 있습니다.

0

그리드의 Application.Copy 기능을 사용하고 코드에서 모두 복사 한 다음 구문 분석 할 수 있습니다. csv, html 및 기타 다른 형식의 클립 보드 도우미 데이터.

관련 문제