怎么把一个DataTable里的几行复制到另一个表里?

时间:2022-09-23 08:13:52
我直接用Add方法加到另一个表的Rows属性就会出错说此行已经在另一个表中

7 个解决方案

#1


需要克隆一下这个数据行,然后再添加,在DataTable中数据行是不允许添加到的别的表的,如果有多个DataTable的行引用指向某一个数据行,那么会导致数据的不安全。

#2


那请问楼上,如果现在A表有10条,我只要其中5条该怎么做?先删除A表中我不要的5条再克隆?

#3


targetTable.Rows.Add( rowToCopy.ItemArray );

#4


例如从ta复制第5行到第10行到tb,你可以写(假设列名相同):
            for (int i = 4; i < 9; i++)
            {
                DataRow dr = tb.NewRow();
                for (int j = 0; j < ta.Columns.Count; j++)
                    dr[ta.Columns[j].ColumnName] = ta.Rows[i][j];
                tb.Rows.Add(dr);
            }

#5


DataTable.ImportRow()方法。

#6


如果两个表的列名还不同,那么不要写

    dr[ta.Columns[j].ColumnName]

而要根据逻辑对应关系做好转换。

基本上,从“一个表复制到另一个表”要做一些“通用”设计功夫,不要想当然,性能不是唯一重要的事情。

#7


ImportRow也可以。但是ImportRow 比较复杂一些,它不用在简单地复制值,而是复制复杂的RowState的时候。

#1


需要克隆一下这个数据行,然后再添加,在DataTable中数据行是不允许添加到的别的表的,如果有多个DataTable的行引用指向某一个数据行,那么会导致数据的不安全。

#2


那请问楼上,如果现在A表有10条,我只要其中5条该怎么做?先删除A表中我不要的5条再克隆?

#3


targetTable.Rows.Add( rowToCopy.ItemArray );

#4


例如从ta复制第5行到第10行到tb,你可以写(假设列名相同):
            for (int i = 4; i < 9; i++)
            {
                DataRow dr = tb.NewRow();
                for (int j = 0; j < ta.Columns.Count; j++)
                    dr[ta.Columns[j].ColumnName] = ta.Rows[i][j];
                tb.Rows.Add(dr);
            }

#5


DataTable.ImportRow()方法。

#6


如果两个表的列名还不同,那么不要写

    dr[ta.Columns[j].ColumnName]

而要根据逻辑对应关系做好转换。

基本上,从“一个表复制到另一个表”要做一些“通用”设计功夫,不要想当然,性能不是唯一重要的事情。

#7


ImportRow也可以。但是ImportRow 比较复杂一些,它不用在简单地复制值,而是复制复杂的RowState的时候。