即使DataTables之间有不同的列名,我们如何将一个DataTable的列数据复制到另一个DataTable?

时间:2010-04-07 13:09:47

标签: c# .net winforms datatable copy

我有两个DataTable。 首先是

DataTable NameAddressPhones = new DataTable(); 

有三列名称,地址和PhoneNo 。但我只想要两列名称和地址数据,所以我想将这些列(带数据)复制到新列数据表。

DataTable NameAddress = new DataTable(); 

为此我做了

            foreach (DataRow sourcerow in NameAddressPhones.Rows)
            {
                DataRow destRow = NameAddress.NewRow();
                foreach (string colname in columns)
                {
                    destRow[colname] = sourcerow[colname];
                }
                NameAddress.Rows.Add(destRow);
            }

每次在表中插入新记录时,我都会清除NameAddressPhones(第一个)DataTable。每次列数相同但列名称不同,如 Nm 而不是名称,添加而不是地址。现在问题是第二个DataTable已经有列名名称和地址,现在我想将 Nm和Add 的列数据复制到第二个DataTable,但列名是与第二个DataTable的列名不同。因此,即使有不同的列名称,我也希望将第一个DataTable的 Nm 列数据复制到第二个DataTable的列名称和列添加数据第一个DataTable到第二个DataTable的地址列。

简而言之,我们如何将列数据从一个DataTable复制到另一个DataTable,即使两个DataTable的列名都不同,例如 Nm 是第一个DataTable的列名和名称是第二个DataTable的列名,然后应将列 Nm 的数据复制到名称列。

3 个答案:

答案 0 :(得分:10)

这是最简单的方法:

foreach (DataRow sourcerow in NameAdressPhones.Rows)
{
    DataRow destRow = NameAdress.NewRow();
    destRow["Name"] = sourcerow["Nm"];
    destRow["Address"] = sourcerow["Add"];
    NameAdress.Rows.Add(destRow);
}

自动化很有用。如果不是,则必须以某种方式将源列映射到目标列。

如果两个表中的列的顺序相同,那么 只能按顺序而不是列名来引用这些值,但这是一个坏主意我甚至不会发布任何代码。

答案 1 :(得分:1)

使用列索引号而不是名称:

destRow[0] = sourcerow[0]; // for column 0 = "Name" or "NM"

答案 2 :(得分:0)

如果我理解你的问题是正确的,那么通常采用存储过程的方式。两个数据库中都有相同的存储过程,但实现特定于每个数据库的表模式。这允许您进行所需的抽象。