c#两个datatable匹配问题

datatable1:列 a b c d e(有数据)
datatable2:列 a b c (没有数据)
怎么将datatable1的数据填充到datatable2里面?

把datatable1中删除不需要的2列,自然就是datatable2了

方法 一 移除不需要的列,再复制他的其他所有列,然后执行数据遍历

if(datatable1!=null &&datatable1.Rows.Count>0)
{
datatable1.Columns.Remove("c");
datatable1.Columns.Remove("d");
datatable2 = datatable1.clone();
foreach (DataRow dr in datatable1.Rows)
{
DataRow dtNew =dr;
datatable1.Rows.Add(dr);
}

        }

    方法二       直接复制表结构和数据

               datatable1.Columns.Remove("c");
            datatable1.Columns.Remove("d"); 
            datatable2 = datatable1.Copy();

当然方法一夜可以使用类似方法二的做法;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication16
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

    //点击就赋值
    private void button1_Click(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        DataColumn dc1 = new DataColumn("Name2");
        DataColumn dc2 = new DataColumn("Value2");
        dt.Columns.Add(dc1);
        dt.Columns.Add(dc2);
        //循环赋值
        for (int i = 0; i < dataGridView1.RowCount; i++)
        {
            DataRow dr = dt.NewRow();
            dr[0] = i+1;//i一开始是0
            dr[1] = dataGridView1.Rows[i].Cells[0];
            dt.Rows.Add(dr);
        }
        dataGridView2.DataSource = dt;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        DataColumn dc1 = new DataColumn("Name");
        DataColumn dc2 = new DataColumn("Value");

        dt.Columns.Add(dc1);
        dt.Columns.Add(dc2);

        for (int i = 1; i <= 10; i++)
        {
            DataRow dr = dt.NewRow();
            dr[0] = i;
            dr[1] = i.ToString() + "_DataTable";
            dt.Rows.Add(dr);
        }
        dataGridView1.DataSource = dt;
    }
}

}

            DataTable dt1 = new DataTable();
            DataTable dt2 = new DataTable();
            dt1.Columns.Add("a");
            dt1.Columns.Add("b");
            dt1.Columns.Add("c");
            dt1.Columns.Add("d");

            dt2.Columns.Add("a");
            dt2.Columns.Add("b");   //这里我创建了两个表一个有列abcd,一个有列ab,但是我没有添加数据

            foreach (DataRow item in dt1.Rows)  //循环第一张表的行
            {
                DataRow row = dt2.NewRow(); //第二张表实例化一个行
                foreach (DataColumn item1 in dt1.Columns)   //循环第一张表的列
                {
                    if (dt2.Columns.Contains(item1.ColumnName))     //如果在第二张表里找不到某一列就进入下一个循环
                        continue;
                    row[item1.ColumnName] = item[item1];    //将第一个表的对应行某列的值赋值给row的对应位置
                }
                dt2.Rows.Add(row);  //将行插入表二
            }

一种时将datatable1中的后两列删除了,另一种就是循环datatable1的数据插入到datatable2中