C#中如何快速地将一个表(datatable)的内容复制给另一个表

来源:互联网 发布:断食减肥知乎 编辑:程序博客网 时间:2024/04/29 19:22

       显然,列的结构是一样的,但列名可以不一样。之所以会出现这个问题,是因为我从数据库中把表调出来显示在dataGridView中时,需要将英文列名改为对用户亲善的中文列名。同时,程序允许用户直接修改表,并可以更新至数据库。这时由于列名已经改过,更新会失败。有两种解决方法,一种是将列名再改回去,另一种是将中文列名表中的内容复制到英文列名表中去。实现上第二种方法相对简便。

假设英文列名表为DtEng,中文列名表为DtChi.则以下几条简单语句即可实现数据的复制。 

                              DtEng.Clear();                foreach (DataRow row in DtChi.Rows)                {                    dtEng.ImportRow(row);                }

用DtEng来更新数据库就没有问题了。

那用DataRowCollection.Add()方法可以吗?

                DtEng.Clear();                foreach (DataRow row in DtChi.Rows)                {                    dtEng.Rows.Add(row);                }
答案是不可以。当用datatable.NewRow()方法初始化的datarow的状态(rowstate)是detached,这种datarowDataRowCollection.Add()唯一能接受的参数。

那用Datatable.Copy()方法可以吗?

DtEng = DtChi.Copy();
答案是不可以。Datatable.Copy()方法会复制结构和数据,这会导致两个表的列名也会相同,而我们这里只要求复制数据。

附上测试代码

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            DataTable dt=new DataTable();            dt.Columns.Add("第一行");            dt.Columns.Add("第二行");            DataRow dr = dt.NewRow();            dr["第一行"]=1;            dr["第二行"]=2;            Console.WriteLine(dr.RowState.ToString());            try            {                dt.ImportRow(dr);                Console.WriteLine(dt.Rows[0][0].ToString());            }            catch             {                Console.WriteLine("dt.ImportRow(dr)运行后没有添加任何数据");                Console.WriteLine("DataTable的ImportRow()方法不能添加状态为Detached的行");            }            dt.Rows.Add(dr);            Console.WriteLine(dr.RowState.ToString());            dr["第二行"] = 3;            Console.WriteLine(dr.RowState.ToString());            DataTable dt2 = new DataTable();            dt2.Columns.Add("A");            dt2.Columns.Add("B");            Console.WriteLine(dt2.Columns[0].ColumnName.ToString());            try            {                dt2.Rows.Add(dr);            }            catch             {                Console.WriteLine("fali!");            }            dt2 = dt.Copy();            Console.WriteLine(dt2.Columns[0].ColumnName.ToString());                        Console.ReadLine();        }    }}

欢迎大家访问我的独立技术博客 道合|SameIdeal.com



原创粉丝点击