2016-08-09 2 views
-1

mvvm 방식으로 관찰 가능한 컬렉션에 바인딩 된 DataGridview가 있습니다. 나는 CSV 파일에 컬렉션을 쓰는 방법을 알아 내려고하고있다.Observable Collection을 Csv 파일에 작성하십시오.

헤더를 형식화하고 그 안에 넣을 수는 있지만 컬렉션을 반복하여 값을 가져 와서 쉼표로 구분하여 파일에 저장하는 방법을 확신 할 수 없습니다. 여기

는 관찰 모음으로로드되는 내 수업

public class ResultsModel 
    { 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public int Phone { get; set; } 
     public string Username { get; set; } 
     public bool Sucess { get; set; } 
     public string MessageType { get; set; } 
     public string SenderMessageSent { get; set; } 
     public string SenderMessageReceived { get; set; } 
    } 

입니다

+0

가 어떻게 루프를 작성하는 요구하고 있습니까? –

+0

@EdPlunkett 예, OP가 루프를 작성하려고합니다. – AVK

+1

@AVKNaidu 글쎄, 여기 주변의 누군가가 비밀을 발견했을거야. –

답변

1

여기에 개체의 컬렉션에있는 모든 속성의 값을 얻을 수있는 반사를 이용하여 분리 쉼표로 직렬화하는 일반 도우미 메서드입니다 값 문자열.

public static IEnumerable<string> ToCsv<T>(IEnumerable<T> list) 
     { 
      var fields = typeof(T).GetFields(); 
      var properties = typeof(T).GetProperties(); 

      foreach (var @object in list) 
      { 
       yield return string.Join(",", 
             fields.Select(x => (x.GetValue(@object) ?? string.Empty).ToString()) 
               .Concat(properties.Select(p => (p.GetValue(@object, null) ?? string.Empty).ToString())) 
               .ToArray()); 
      } 
     } 

(1 개 라인 컬렉션에서 1 개체를 =) 그리고 예시적인 사용 :

var oemResultsModels = new List<OemResultsModel> 
            { 
             new OemResultsModel 
             { 
              FirstName = "Fname1", 
              LastName = "LName1", 
              MessageType = "Type1", 
              Phone = 1234567, 
              SenderMessageReceived = "something1", 
              SenderMessageSent = "somethingelse1", 
              Sucess = true, 
              Username = "username1" 
             }, 
             new OemResultsModel 
             { 
              FirstName = "Fname2", 
              LastName = "LName2", 
              MessageType = "Type2", 
              Phone = 123456789, 
              SenderMessageReceived = "something2", 
              SenderMessageSent = "somethingelse2", 
              Sucess = false, 
              Username = "username2" 
             } 
            }; 

      using (var textWriter = File.CreateText(@"C:\destinationfile.csv")) 
      { 
       foreach (var line in ToCsv(oemResultsModels)) 
       { 
        textWriter.WriteLine(line); 
       } 
      } 
관련 문제