2016-11-23 3 views
2

Also ich versuche, einige Zeilen zu einem DataTable hinzufügen, aber aus irgendeinem Grund scheint es die vorherige Zeile zu überschreiben. Wie kann ich das verhindern?DataTable überschreibt vorherige Zeile

Was ich habe, so weit ist dieses Stück Code:

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); 
} 

Daten Beispiel:

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

Daten führen

"ID": 4 

führen wollte

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

Ich habe bereits überprüft, dass es durch die Schleifen läuft, wie es sollte, kein Problem dort. Wenn wir die Zeile hinzufügen, scheint das Problem zu passieren

+1

Wenn vorherige Zeile gleiche param.Name haben, überschreibt es (Zeile [parm.Name] = parm.Value;). Was möchten Sie erreichen? Sie möchten alle Artikel von ValueArray hinzufügen? –

+1

Also am Ende haben Sie nur eine Zeile in Ihrer DataTable, aber Sie haben mehrere Elemente in ValueArray? – mybirthname

+0

@mybirthname: Das ist korrekt –

Antwort

1

Sie müssen alle Werte von Param hinzufügen, nicht nur zuletzt. Sie können so versuchen

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); 
    } 

} 
Verwandte Themen