DataTable.DataRow的复制
经常遇到这种错误,“此行已属于另一个表”的错误,导致这个错误的语句如下:
dtPriceTable.Rows.InsertAt(aDataRow,i);或者
dtPriceTable.Rows.Add(aDataRow);我分析了一下原因,因为DataRow DataTable 都是传引用调用的。所以一个行在一个表中了,就不能再增加到另外一个表。
具体的改善策略有两种:
1、 把原始DataRow的每列依次赋值。如下:
DataRow tempRow = dtItemPrice.NewRow();
tempRow ["First"] = aDataRow ["First "]
tempRow ["second"] = aDataRow ["second "]
tempRow ["third"] = aDataRow ["third "]
tempRow ["forth"] = aDataRow ["forth "]
tempRow ["Fifth"] = aDataRow ["Fifth "]
…… 
dtPriceTable.Rows.Add(tempRow)2、 循环DataTable的每列。如下:
DataRow aDataRow = dtItemPrice.NewRow();
foreach(DataColumn aDataColumn in dtItemPrice.Columns)
{
aDataRow[aDataColumn.ColumnName] = drItemPrices[i][aDataColumn.ColumnName];
}
InsertConditionType(aDataRow,dtItemPrice); 测试就可以了。
3、在表结构相同的情况下,如下面所示:
DataRow aDataRow = dtItemPrice.NewRow();
aDataRow.ItemArray = drItemPrices[i].ItemArray;
dtItemPrice.Rows.Add(aDataRow);4、使用importRow的方法
常用方法 :
有两个表A和B,两表结构相同。现在需要将A表中部分行拷贝到B表中。
如果我们直接用 DataTableB.rows.add(dataTableA.rows[0]) 这样的方法式会报"row已经属于A表"这样的错误。
所以我们可以用另外的方法。
方法1,使用dataTable.ImportRow()方法。代码如下:
//得到A表中的部分行
DataRow[] drA = dtA.Select("aimtype=3");
//实例B
DataTable dtB = dtA.Clone();
if (drA.Length > 0)
{
foreach (DataRow drVal in drA)
{
//向B中增加行
dtB.ImportRow(drVal);
}
}
方法2,使用DataTable.Rows.Add(params object[] values)方法,代码如下:
//得到A表中的部分行
DataRow[] drA = dtA.Select("aimtype=3");
//实例B
DataTable dtB = dtA.Clone();
if (drA.Length > 0)
{
foreach (DataRow drVal in drA)
{
//向B中增加行
dtB.Rows.Add(drVal.ItemArray);
}
}
DataTable.DataRow的复制的更多相关文章
- DataSet & DataTable &DataRow 深入浅出
本篇文章适合有一定的基础的人去查看 ,最好学习过一定net 编程基础在来查看此文章. 1.概念 DataSet是ADO.NET的中心概念.可以把DataSet当成内存中的数据库,DataSet是不依赖 ...
- DataTable DataRow DataColumn DataSet
1.DataTable 数据表(内存) 2.DataRow DataTable 的行 3.DataColumn DataTable 的列 4.DataSet 内存中的缓存
- DataSet - DataTable - DataRow 读取 xml 文件 + 搜索
DataSet ds = XmlHelper.GetDataSetByXml(AppDomain.CurrentDomain.BaseDirectory + "/Config/ConfigN ...
- C# WinForm:DataTable中数据复制粘贴操作的实现
1. 需要实现类似于Excel的功能,就是在任意位置选中鼠标起点和终点所连对角线所在的矩形,进行复制粘贴. 2. 要实现这个功能,首先需要获取鼠标起点和终点点击的位置. 3. 所以通过GridView ...
- Redis 通用方法 存储DataTable DataRow DataSet
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- datatable dataRow
DataRow[] Drs = DtStockProduct.Select(Condition11); DtResult = DtStockProduct.Clone(); datatble tabl ...
- DataRow复制一行到另一个DataTable
DataRow复制一行到另一个DataTable 下面两个方法是DataRow复制一行到另一个DataTable的,直接Add会出错“此行已属于另一个表”,其实以前就知道怎么做的,可每次要用到的时 ...
- 【转】DataRow复制一行到另一个DataTable
源地址:http://www.cnblogs.com/pains/archive/2007/11/22/969003.html 下面两个方法是DataRow复制一行到另一个DataTable的, ...
- 如何复制DataRow(dataTabel中的行)
由于需要对dataTabel中的行进行上移和下移操作: row 1 行号0 row2 行号1 row3 行号2 例如将row3上移一行,即row2和row3对调位置. ...
随机推荐
- L9,a cold welcome
expression: a large crowd of 一大群 in twenty minutes’time 20分钟之后 一些时间使用的介词 in two year‘s time on Satur ...
- JavaScript基础教程
功能介绍: (1)数据验证 弹出提示的对话框,产生判断的效果. (2)气泡提示窗口 右下角等等一类的窗口 (3)产生新窗口 (4)无边框窗口背景变灰,也是可以节约系统资源的
- Zabbix之配置文件详解
zabbix的配置文件一般有三种:zabbixserver的配置文件zabbix_server.confzabbixproxy的配置文件zabbix_proxy.confzabbix_agentd的配 ...
- zabbix Lack of free swap space
Zabbix初始设计是大型公司用于监控服务器集群的,但日常中也用于监控VPS或云主机.后者情况下Zabbix的很多配置和属性就没有经过优化,取决于监控的对象和用途,经常需要对一些Zabbix配置进行调 ...
- java thread park
http://agapple.iteye.com/blog/970055 apidoc中说,park/unpark用来阻塞/激活线程,但是没有弃用方法suspend/resume的缺点,suspend ...
- 转 如何使用V7包中ActionBar(Eclipse版)
http://blog.csdn.net/appte/article/details/11712591 以前3.0以前的版本要使用ActionBar,必须使用国外大牛写的ActionBarSherlo ...
- FusionCharts使用问题及解决方法(四)-FusionCharts常见问题大全
在前3篇文章中,我们总结了FusionCharts图表的一些常见问题(FAQ)及解决方法,本文继续讨论FusionCharts使用者常见的一些复杂的报错及解决方法. 问题描述:使用FusionChar ...
- UIImage将图片写入本地相册
UIImageWriteToSavedPhotosAlbum(<#UIImage *image#>, <#id completionTarget#>, <#SEL com ...
- WebDriver(Selenium2) 根据新窗口title切换窗口
http://uniquepig.iteye.com/blog/1559321 在webdriver官方的api中,切换窗口的方法提供的参数是nameOrHandle. 引用 http://uniqu ...
- Android Studio的使用(四)--生成Get、Set方法
如何快速生成Get.Set方法,在我们编程中经常使用,下面将详细介绍. 1.右击代码编辑区域,并选择Generate. 2.在弹出框中选择Getter and Setter. 3.在弹出框中全选所有变 ...