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

Har*_*hna 3 .net c# datatable copy winforms

我有两个DataTable.首先是

DataTable NameAddressPhones = new DataTable(); 
Run Code Online (Sandbox Code Playgroud)

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

DataTable NameAddress = new DataTable(); 
Run Code Online (Sandbox Code Playgroud)

为此我做

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

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

简而言之,即使两个DataTable的列名都不同,我们也可以将列数据从一个DataTable复制到另一个DataTable,例如Nm是第一个DataTable的列名,而Name是第二个DataTable的列名,那么列Nm的数据应该是复制到列名称.

Mus*_*sis 10

这是最简单的方法:

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

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

如果两个表中的列的顺序相同,则可以按顺序而不是列名引用这些值,但这是一个坏主意,我甚至不会为它发布任何代码.