2017-08-24 2 views
0

J'ai deux DataTables en cours de remplissage.Comment combiner dynamiquement deux ou plusieurs DataTables dans C#

DT1 and DT2 

Chaque DataTable a les mêmes en-têtes de colonne. Cependant, DT2 peut ou non avoir le même nombre de lignes.

ID | Type | Value 

J'ai besoin du nouveau tableau pour ajouter des lignes au besoin en fonction du nombre de résultats renvoyés dans la colonne « Type » et définir les lignes DT3 ID = DT1.ID et valeur à « N/A »

 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

J'ai besoin fondamentalement quelque chose comme un vlookup. Mais au lieu de le faire avec les tables, je dois le faire avec le jeu de résultats. – BigBucks

Répondre

2

Voici mon code pour ce numéro:

  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

Oui, il est très proche de travailler, mais une chose de plus. Comment puis-je convertir le type de valeur? La chaîne d'entrée n'était pas dans un format correct. Impossible de stocker dans la colonne Valeur. Le type attendu est Double. Merci iceDragon – BigBucks

+0

Sur mon chemin de la maison, je vais l'éditer une fois là – iceDragon

+0

Merci pour l'aide iceDragon. J'ai fini par ajouter ceci: CONVERT (VARCHAR (50), Value) AS Valeur aux instructions de requête d'origine pour chaque DataTable. Merci encore pour votre aide – BigBucks