2016-11-23 109 views
2

所以我想添加一些行到DataTable,但由於某種原因它似乎覆蓋了前一行。我怎樣才能防止這一點。DataTable覆蓋前一行

我到目前爲止是這樣的一段代碼:

DataTable table = new DataTable(); 

foreach (CallData data in p.ValueArray) 
{ 
    DataRow row = table.NewRow(); 
    foreach (CallParm parm in data.Parm) 
    { 
     if (!table.Columns.Contains(parm.Name)) 
     { 
      table.Columns.Add(parm.Name, typeof(string)); 
     } 
     row[parm.Name] = parm.Value; 
    } 
    table.Rows.Add(row); 
} 

數據例如:

{ 
    ValueArray: [ 
     { 
      Parm: [ 
       { 
        Name: "ID", 
        Value: 1 
       }, 
       { 
        Name: "ID", 
        Value: 2 
       }, 
       { 
        Name: "ID", 
        Value: 4 
       } 
      ] 
     } 
    ] 
} 

數據導致

"ID": 4 

通緝的結果

"ID": 1 
"ID": 2 
"ID": 4 

我已經檢查過它應該在循環中運行,沒有問題。當我們添加行時,問題似乎就發生了

+1

如果前一行有相同的param.Name它覆蓋(行[parm.Name] = parm.Value;)。你想實現什麼?你想要從ValueArray中添加所有項目? –

+1

因此,最後你的DataTable中只有一行,但是ValueArray中有多個項目? – mybirthname

+0

@mybirthname:這是正確的 –

回答

1

您需要添加Param中的所有值,而不僅僅是最後一個。你可以嘗試這樣的

DataTable table = new DataTable(); 

foreach (CallData data in p.ValueArray) 
{ 
    DataRow row = table.NewRow(); 
    foreach (CallParm parm in data.Parm) 
    { 
     if (!table.Columns.Contains(parm.Name)) 
     { 
      table.Columns.Add(parm.Name, typeof(string)); 
     } 
     row[parm.Name] = parm.Value; 
     //now you add all items in this loop not only last element. 
     table.Rows.Add(row); 
    } 

}