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

       显然,列的结构是一样的,但列名可以不一样。之所以会出现这个问题,是因为我从数据库中把表调出来显示在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



  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值