如何在c#中动态组合两个或多个DataTables
Posted
技术标签:
【中文标题】如何在c#中动态组合两个或多个DataTables【英文标题】:How to combine two or more DataTables dynamically in c# 【发布时间】:2018-02-02 21:35:09 【问题描述】:我有两个数据表正在填充。
DT1 and DT2
每个 DataTable 都有相同的列标题。但是,DT2 的行数可能相同,也可能不同。
ID | Type | Value
我需要新表根据“类型”列中返回的结果数量添加行,并将 DT3 行 ID = DT1.ID 和值设置为“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
【问题讨论】:
我基本上需要像 vlookup 这样的东西。但是,我需要使用结果集来代替表格。 【参考方案1】:这是我解决这个问题的代码:
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" );
【讨论】:
是的,它非常接近工作,但还有一件事。如何转换值类型?输入字符串的格式不正确。无法在值列中存储以上是关于如何在c#中动态组合两个或多个DataTables的主要内容,如果未能解决你的问题,请参考以下文章
如何在 django admin 中组合两个或多个 ModelAdmin
如何在不刷新网页的情况下使用 ajax 和 jquery 动态更改 Datatables 的多个列标题?