2016-11-23 2 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

Если предыдущая строка имеет тот же параметр. Имя переписывается (строка [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); 
    } 

}