如何在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" );
                
            

【讨论】:

是的,它非常接近工作,但还有一件事。如何转换值类型?输入字符串的格式不正确。无法在值列中存储 。预期类型为 Double。谢谢冰龙 感谢冰龙的帮助。我最终只是将这个:CONVERT (VARCHAR(50),Value) AS Value 添加到每个 DataTable 的原始查询语句中。再次感谢您的帮助

以上是关于如何在c#中动态组合两个或多个DataTables的主要内容,如果未能解决你的问题,请参考以下文章

C# DataTable 内连接与动态列

如何动态更改 C# 组合框或文本框中的自动完成条目?

如何在 django admin 中组合两个或多个 ModelAdmin

如何在不刷新网页的情况下使用 ajax 和 jquery 动态更改 Datatables 的多个列标题?

如何在 Jenkins“执行 Windows 批处理命令”中组合两个或多个命令

如何在单个 C# 函数中为两个或多个不同的变量使用相同的名称? [关闭]