2016-09-20 3 views
0

私はExcelシートからデータを抽出し、それをクラスプロパティに配置します。 以下に示すコードでは、データをList<>のプロパティに追加しようとしています。エラーなしで実行されますが、List<>のカウントは常に1です。 以下の例に示すように、forループは5回実行されますが、forループが存在するとrah.rahTermDateカウントは1になります。List <>タイプのプロパティにデータを追加する

for (int i = 0; i < 5; i++) 
    {     
    RawACAHireTermDates rahd = new RawACAHireTermDates(); 
    rahd.RawHireDate = Convert.ToDateTime(GetCellValue(GetCell(sheetData, Cells[i, k], j), workbookPart, false, true)); 
    rahd.RawTermDate = Convert.ToDateTime(GetCellValue(GetCell(sheetData, Cells[i, (k + 1)], j), workbookPart, false, true)); 
    rah.rahTermDate = new List<RawACAHireTermDates> { rahd }; 
    // rah.rahTermDate.Add(rahd);    
    } 

ビジネス・オブジェクト:

public class MasterClientGroupSheetData 
    { 
    public class RawACAHireTermDates 
    {  
     public DateTime? RawHireDate { get; set; } 
     public DateTime? RawTermDate { get; set; }     
    } 

    public class RawACAHireTermEmployee 
    { 
........... 
     public List<RawACAHireTermDates> rahTermDate { get; set; } 
    } 
} 

答えて

1

この行は犯人である:

rah.rahTermDate = new List<RawACAHireTermDates> { rahd }; 

ループが実行されるたび、あなたはrah.rahTermDateに新しいリストを設定しています。

//before the loop, declare a new List 
rah.rahTermDate = new List<RawACAHireTermDates>(); 

for (int i = 0; i < 5; i++) 
    {     
    RawACAHireTermDates rahd = new RawACAHireTermDates(); 
    rahd.RawHireDate = Convert.ToDateTime(GetCellValue(GetCell(sheetData, Cells[i, k], j), workbookPart, false, true)); 
    rahd.RawTermDate = Convert.ToDateTime(GetCellValue(GetCell(sheetData, Cells[i, (k + 1)], j), workbookPart, false, true)); 

    //add to the existing list... 
    rah.rahTermDate.Add(rahd);    
    } 
+0

回答のすべてが正しい:

あなたのコードはもっとこのようにする必要があります。しかし、私は答えとして1つだけマークすることができます(: –

3

あなたがループ内であなたのリストを再作成しています。ループ外に作成してください:

rah.rahTermDate = new List<RawACAHireTermDates>(); 

for (int i = 0; i < 5; i++) 
{     
    RawACAHireTermDates rahd = new RawACAHireTermDates(); 
    rahd.RawHireDate = Convert.ToDateTime(GetCellValue(GetCell(sheetData, Cells[i, k], j), workbookPart, false, true)); 
    rahd.RawTermDate = Convert.ToDateTime(GetCellValue(GetCell(sheetData, Cells[i, (k + 1)], j), workbookPart, false, true)); 
    rah.rahTermDate.Add(rahd); 
    // rah.rahTermDate = new List<RawACAHireTermDates> { rahd }; <-- this line was the problem 
} 
5

このコードは、各繰り返しでリストを再初期化し、以前のデータを失います。あなたは、新しいリストに処理された項目を1つだけ、含まれているすべての反復 rah.rahTermDate = new List<RawACAHireTermDates> { rahd }; を作成forループの外であなたのリストを定義し、次に.add()

1

を使用して、それに項目を追加する必要があり

rah.rahTermDate = new List<RawACAHireTermDates> { rahd };

同じ繰り返し。 この問題を解決するには、forループの外側のリストを定義します。ループでは、リストに要素を追加し、forループの後に rah.rahTermDateを割り当てます。

関連する問題