2017-08-24 4 views
0

kombiniert Ich habe zwei DataTables gefüllt.Wie man zwei oder mehr DataTables dynamisch in C#

DT1 and DT2 

Jede DataTable hat dieselben Spaltenüberschriften. Jedoch kann DT2 die gleiche Anzahl von Zeilen haben oder nicht.

ID | Type | Value 

Ich brauche den neuen Tabellenzeilen nach Bedarf auf die Anzahl der Ergebnisse auf Basis hinzufügen, die

in der Spalte „Typ“ und setzen DT3 Reihen ID = DT1.ID und Wert auf „N/A“ zurückgegeben werden
 DT1      DT2        DT3 
ID | Type | Value  ID | Type | Value  ID | Type | Value 
1 ItemCost 5000  27 ItemCost 3800  27 ItemCost 3800 
2 TravCost 5700  28 TravCost 4851  28 TravCost 4851 
3 UpCharge 3600         3 UpCharge N/A 
4 TaxCost 7000         4 TaxCost N/A 
+0

ich im Grunde so etwas wie ein vlookup brauchen. Aber anstatt es mit den Tabellen zu tun, muss ich es mit dem Ergebnissatz machen. – BigBucks

Antwort

2

Hier ist mein Code für dieses Problem:

  DataTable dt1 = new DataTable(); 
      dt1.Columns.Add("ID"); 
      dt1.Columns.Add("Type"); 
      dt1.Columns.Add("Value"); 
      dt1.Rows.Add(new Object[] { "1", "ItemCost", "5000" }); 
      dt1.Rows.Add(new Object[] { "2", "TravCost", "5700" }); 
      dt1.Rows.Add(new Object[] { "3", "UpCharge", "3600" }); 
      dt1.Rows.Add(new Object[] { "4", "TaxCost", "7000" }); 
      DataTable dt2 = new DataTable(); 
      dt2.Columns.Add("ID"); 
      dt2.Columns.Add("Type"); 
      dt2.Columns.Add("Value"); 
      dt2.Rows.Add(new Object[] { "27", "ItemCost", "3800" }); 
      dt2.Rows.Add(new Object[] { "28", "TravCost", "4851" }); 
      DataTable dt3 = new DataTable(); 
      dt3 = dt2.Clone(); 
      foreach (DataRow item in dt2.Rows) 
      { 
       dt3.Rows.Add(new object[] { item["ID"], item["Type"], item["Value"] }); 
      } 
      foreach (DataRow item in dt1.Rows) 
      { 
       DataRow[] drs = dt3.Select("Type='" + item["Type"].ToString() + "'"); 
       if (drs.Count() == 0) 
       { 
        dt3.Rows.Add(new object[] { item["ID"], item["Type"], "N/A" }); 
       } 
      } 
+0

Ja, es ist sehr nah an der Arbeit, aber noch eine Sache. Wie konvertiere ich den Werttyp? Die Eingabezeichenfolge hatte kein korrektes Format. konnte nicht in der Wertespalte gespeichert werden. Erwarteter Typ ist Double. Danke iceDragon – BigBucks

+0

Auf meinem Heimweg werde ich es mal dort bearbeiten – iceDragon

+0

Danke für die Hilfe iceDragon. Am Ende fügte ich nur folgendes hinzu: CONVERT (VARCHAR (50), Value) AS Wert zu den ursprünglichen Abfrageanweisungen für jede DataTable. Danke nochmal für die Hilfe – BigBucks

Verwandte Themen