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中