DataSet,DataTable.DataRow复制(解决此行已属于另一个表)以及DataTable 实现表结构转换

该行已经属于另一个表 的解决方法 DataTable dt = new DataTable(); dt = ds.Tables[“All”].Clone();//把All的结构传递给dt DataRow[] dr=this.dataSet31.Tables[“Product”].Select(“bc=1”); for(int i=0;i<dr.Length;i++) { //将数组元素加入表 dt.Rows.Add(dr[i]);//出错提示为:该行已经属于另一个表 } //解决方法 dt.Rows.Add(dr[i].ItemArray); //这样就好了! 立即下载

转自:http://blog.youkuaiyun.com/z775480954/article/details/6724992 

 

表A:
------------------
  InfoID FName FContext
  1 name1 c1
  1 name2 c2
  1 name3 c3
  2 name1 c4
  3 name4 c5
------------------
转换成
表B:
---------------------
  InfoID name1 name2 name3 name4
  1 c1 c2 c3 null
  2 c4 null null null
  3 null null null c5

---------------------

先在数据库中创建表A

通过asp.net来访问数据库

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Web;  
  5. using System.Web.UI;  
  6. using System.Web.UI.WebControls;  
  7. using System.Data.SqlClient;  
  8. using System.Data;  
  9. using System.Configuration;  
  10.   
  11. namespace JavaScript  
  12. {  
  13.     public partial class DD : System.Web.UI.Page  
  14.     {  
  15.         protected void Page_Load(object sender, EventArgs e)  
  16.         {  
  17.             //获取FName集合,去掉重复   
  18.             DataTable dtFName = GetData("select DISTINCT FName from A", "FName");  
  19.   
  20.             DataTable dtTable = new DataTable();  
  21.             //dtTable 添加列名   
  22.             dtTable.Columns.Add("InfoID ",typeof(int));  
  23.             for (int i = 0; i < dtFName.Rows.Count; i++)  
  24.             {  
  25.                 dtTable.Columns.Add(dtFName.Rows[i][0].ToString(), typeof(string));  
  26.             }  
  27.   
  28.             //获取表A的数据   
  29.             DataTable dtA=GetData("select * from A","A");  
  30.   
  31.             //获取InfoID集合   
  32.             DataTable dtInfoID = GetData("select DISTINCT InfoID from A", "InfoID");  
  33.   
  34.             int count=dtInfoID.Rows.Count;  
  35.   
  36.             //创建表结构   
  37.             for (int i = 0; i < count; i++)  
  38.             {  
  39.                 DataRow row = dtTable.NewRow();  
  40.                 object[] obj = new object[dtInfoID.Rows.Count];  
  41.                 obj[0] = dtInfoID.Rows[i][0];  
  42.                 row.ItemArray = obj;  
  43.                 dtTable.Rows.Add(row);  
  44.             }  
  45.   
  46.             //循环给表填充值   
  47.             for (int i = 0; i < dtA.Rows.Count; i++)  
  48.             {  
  49.                 DataRow drA = dtA.Rows[i];  
  50.                   
  51.                 for (int j = 0; j < dtTable.Rows.Count; j++)  
  52.                 {  
  53.                     DataRow row=dtTable.Rows[j];  
  54.   
  55.                     //对应列名填充   
  56.                     if (Convert.ToInt32(row[0]) == Convert.ToInt32(drA[1]))  
  57.                     {  
  58.                         row[drA[2].ToString()] = drA[3];  
  59.                     }  
  60.                     else  
  61.                     {  
  62.                         row[drA[2].ToString()] = "null";  
  63.                     }  
  64.                       
  65.                 }   
  66.             }  
  67.   
  68.             GridView1.DataSource = dtTable;  
  69.             GridView1.DataBind();  
  70.                   
  71.         }  
  72.   
  73.         //数据库访问,获取数据   
  74.         protected DataTable GetData(string sql,string tbName)  
  75.         {  
  76.             string connStr = ConfigurationManager.ConnectionStrings["FileManageConnectionString"].ConnectionString;  
  77.             SqlConnection conn = new SqlConnection(connStr);  
  78.             SqlDataAdapter sda = new SqlDataAdapter(sql, conn);  
  79.             DataSet ds = new DataSet();  
  80.             sda.Fill(ds, tbName);  
  81.             DataTable dt = ds.Tables[tbName];  
  82.             return dt;  
  83.         }  
  84.     }  
  85. }  

 

转自:http://www.cnblogs.com/chiname/articles/143167.html

 

DataSet,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的每个列呢?我想是哦,为什么不呢!

呵呵,这样子,不管Table有多少列,只需要3句话就搞定了

DataRow aDataRow = dtItemPrice.NewRow();

    foreach(DataColumn aDataColumn in dtItemPrice.Columns)

    {

 aDataRow[aDataColumn.ColumnName] = drItemPrices[i][aDataColumn.ColumnName];

    }

InsertConditionType(aDataRow,dtItemPrice);

 

测试就可以了。

后来看了看DataSet 和 DataTable 都有一个方法:Copy(),复制该 System.Data.DataTable 的结构和数据。

 

那么结合这个函数,无论是DataSet 和 DataTable还是DataRow 都有复制的方法了。

Feedback

# re: DataSet,DataTable.DataRow复制方法——解决:此行已属于另一个表   

2004-07-08 12:31 by zhaixd
在确保表结构相同的情况下,有只需要一行的更为简单的方法:
如下面所示:
DataRow aDataRow = dtItemPrice.NewRow();

aDataRow.ItemArray = drItemPrices[i].ItemArray;

dtItemPrice.Rows.Add(aDataRow);

# re: DataSet,DataTable.DataRow复制方法——解决:此行已属于另一个表   

2004-07-08 13:20 by 柚子nan
呵呵,不错。
你的方法更强!

# re: DataSet,DataTable.DataRow复制方法——解决:此行已属于另一个表   

2004-07-08 13:47 by Knight
还有一个叫做importRow的方法吧,可以使用,更加方便!

 

SPMI、PMBus、AVSBus:三大电源管理总线对比与选型指南 在现代电子系统中,电源管理是确保高性能与低功耗平衡的核心技术。其原理在于通过数字通信协议,实现电源管理单元(PMIC)与用电芯片间的精准“对话”,从而动态调整供电。这项技术的核心价值在于提升系统能效、增强可靠性并简化设计。其应用场景广泛,从智能手机、服务器到汽车电子无处不在。具体实现上,衍生出了三大主流协议:为移动嵌入式高度集成的SPMI总线、专注于工业标准监控的PMBus总线,以及追求极致实时能效的AVSBus总线。理解SPMI在复杂时序控制与PMBus在标准化配置方面的异同,是进行电源架构选型与调试的关 阅读详情

相关推荐

SAP WM模块配置详解

1.给工厂/存储地点分配仓库编码 功能说明 配置路径 IMG>企业结构>分配>分配后勤执行>给工厂/存储地点分配仓库编码 业务示例 配置步骤 2.定义仓库号码控制参数 功能说明 配置路径 IMG>后勤执行>仓库管理>主数据>主数据>定义仓库号码控制参数 业务示例 配置步骤 3.定义编码范围 功能说明 配置路径 IMG>后勤执行>仓库...

weixin_40672823的博客 2万+

.net运行报错名为“ds”的 DataTable 已属于此 DataSet

.net运行报错名为“ds”的 DataTable 已属于此 DataSet

秉持Love and share的态度去学习和生活 713

Python学习24:中国古代数学问题——物不知数(Python123)

意思是说有一些物品,不知道有多少个,3个3个数的话,还多出2个;5个5个数则多出3个;7个7个数也会多出2个。题目为‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?现假设物品总数不超过n (n

weixin_60530224的博客 2万+

Datatable添加数据,提示该行已经属于另一个表的解决方法

一、DataTable.Rows.Add(DataRow.ItemArray); 二、DataTable.ImportRow(DataRow) 三、设置DataTable的tablename,然后.Rows.Add 第一种方法在项目中用到,确实好用!不过感觉第二种应该更好用一些. 案例 DataTable newDt = new DataTable();

gujing_2015的博客 3555

特斯拉数字孪生4.0体系解析:从“数字镜像“到“持续进化“的造车革命

当每一辆汽车都拥有自己的“数字分身”,我们正见证的不仅是技术革新,更是整个制造业文明形态的跃迁。其数字孪生体已超越“数字镜像”的被动属性,成为。特斯拉年服务收入超1200美元/车的业绩表明,数字孪生正在将汽车从“交通工具”转变为“持续增值的智能终端”。构建起覆盖设计、制造、使用、服务全链条的虚拟镜像体系,将物理世界与数字世界的融合推向新高度。:特斯拉的实践证明,数字孪生已从“技术选项”升级为“战略必选项”。不仅重塑了汽车产品的价值创造逻辑,更预示着整个制造业向“元宇宙工业”演进的新范式。

beige888的博客 1608

Telegram AI Bot自动化实战:5步用Make搭建业务工作台

Telegram Bot 是一种轻量级、高抵达率的消息自动化载体,其核心价值在于将结构化消息(如text、photo、callback_query)转化为可编程的事件流。基于 Bot API 的简洁设计与 Webhook 机制,开发者无需复杂鉴权即可实现毫秒级响应。结合低代码平台 Make,可快速构建具备上下文识别、条件路由、多系统分发与错误熔断能力的自动化流程。该方案特别适用于客服分发、数据同步、IoT告警等高频、规则明确、需即时反馈的业务场景,显著降低对 Python/Node.js 编程与 DevOp

weixin_33158887的博客 301

DataTable 已属于另一个 DataSet。

第一次是调用时没有问题的,第二次就会报错,解决方法如下: 把dsprint.Tables.Add(dtpat);改成dsprint.Tables.Add(dtpat.Copy());就可以了。

MonkeyBananas的博客 6141

Deeplabcut实战:从数据标注到行为分析的全流程解析

本文详细解析了Deeplabcut从数据标注到行为分析的全流程实战技巧,包括项目创建、配置文件定制、智能帧提取、高效标注方法、模型训练优化以及多视角融合等高级应用。通过具体案例和实用参数配置,帮助研究者快速掌握这一行为分析工具,提升实验效率和准确性。

weixin_29057163的博客 246

VB.NET 表(datatable)之间的数据行复制

dim dt as DataTable dim newdt as DataTable for i = 0 to dt.Rows.Count-1 { newdt.Rows.Add(dt.Rows(i).ItemArray) }

唐者荣耀的博客 541

深入解析Linux驱动开发中的I2C时序及I2C高频面试题

在 I2C 通信中,主设备和从设备的角色有着明确的定义。主设备是发起通信的设备,它负责控制整个通信过程。主设备可以是微控制器、处理器等具有控制能力的设备。

大模型大数据攻城狮的专栏 2764

激光雷达与相机时间戳同步:原理、触发方案与工程实现

目录一、引言:时间不同步,多传感器融合必出问题二、核心原理:相机成像机制与触发模式(同步的基础)2.1 相机成像的两个核心阶段:曝光与读出(1)非交叠曝光(2)交叠曝光2.2 相机触发模式:内触发 vs 外触发(1)内触发(2)外触发2.3 关键信号:Strobe信号与预输出(同步的核心技巧)三、三种主流时间戳同步方案(工程落地首选)3.1 方案一:统一硬触发(精度最高,高端场景首选)核心原理核心配置要点优缺点适用场景3.2 方案二:软触发+硬触发(Strobe预输出,车载量产首选)核心原理核心配置要点优缺

getusushu的博客 200

如何解决"DataTable已属于另一个DataSet问题"

ds.Tables.Add(dt.Copy());

jklkjz的专栏 1443

手把手教你学Simulink--智能控制算法的控制算法领域仿真建模实例:基于Simulink的遗传算法优化控制仿真模型

通过上述步骤,你可以设计并仿真一个基于Simulink的遗传算法优化控制模型。这种方法适用于许多复杂的优化场景,尤其是当传统方法难以找到最优解时。随着经验的积累,你可以进一步优化遗传算法的参数设置,或者结合其他智能优化技术(如粒子群优化、差分进化等)提升优化性能。

MHD0815的博客 208

DataSet、DataTable、DataRow的数据复制方法

DataSet 对象是支持 ADO.NET的断开式、分布式数据方案的核心对象 ,用途非常广泛.我们很多时候需要使用其中的数据,比如取得一个DataTable的数据或者复制另一个DataTabe中的数据或者是DataRow的数据,但是只有DataSet和DataTable的复制是支持深层复制的,就是说不仅能复制元素的结构,而且能复制元素的数据,而DatatDataRow没有相关的复制的方法,下面将简

wzm199012的专栏 1301

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

DataSet,DataTable与DataRow的复制方法 [转]

DataSet 对象是支持 ADO.NET的断开式、分布式数据方案的核心对象 ,用途非常广泛.我们很多时候需要使用其中的数据,比如取得一个DataTable的数据或者复制另一个DataTabe中的数据或者是DataRow的数据,但是只有DataSet和DataTable的复制是支持深层复制的,就是说不仅能复制元素的结构,而且能复制元素的数据,而DatatDataRow没有相关的复制的...

weixin_30780649的博客 156

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VB.NET学习笔记:操作数据集DataSet中DataTable数据行(DataRow)——新增、插入、复制、克隆

通常我们都知道可以使用OleDbDataAdapter对象的Fill方法从数据源检索数据并填充DataSet 中的DataTable,其实我们也可以人工为DataTable添加DataRow。 一、Rows.Add和Rows.InsertAt方法 Add和InsertAt方法都可以把新行添加到DataTable。 新一个Windows应用程序,在Form1窗体拉入一个按钮和DataGridView...

zyjq52uys的博客 1万+

ADO.NET中DataSet、DataTable、DataRow的数据复制方法

 DataSet 对象是支持 ADO.NET的断开式、分布式数据方案的核心对象 ,用途非常广泛.我们很多时候需要使用其中的数据,比如取得一个DataTable的数据或者复制另一个DataTabe中的数据或者是DataRow的数据,但是只有DataSet和DataTable的复制是支持深层复制的,就是说不仅能复制元素的结构,而且能复制元素的数据,而DatatDataRow没有相关的复制的方法

mustbelove的专栏 888

DataSet,DataTable与DataRow的复制方法

 DataSet 对象是支持 ADO.NET的断开式、分布式数据方案的核心对象 ,用途非常广泛.我们很多时候需要使用其中的数据,比如取得一个DataTable的数据或者复制另一个DataTabe中的数据或者是DataRow的数据,但是只有DataSet和DataTable的复制是支持深层复制的,就是说不仅能复制元素的结构,而且能复制元素的数据,而DatatDataRow没有相关的复制的方法,下

天才也是人 557

DataSet赋值

DataSet 一个具有很多内置方法的程序集,在绑定数据中,使用率非常之高,虽然没有自定义泛型灵活性高,强类型的数据严谨性,而且一次性加载所有数据也稍微影响性能,但无可比拟的开发效率,在一些对性能要求不高的中小型绑定资料里,起到了非常好的作用.下面介绍了几种DataSet 的赋值

霜叶红于二月花 7570

关于DataSet,DataTable,DataRow的理解

  刚开始的时候从书上得知DataSet,DataTable都是属于引用类型,虽然书说有例子,但是还是未能真正理解,直至最近的一次开发,对其使用的多了,终于有所明白,为了以后紧记,所以记了下来.何为引用户类型呢,用字真的好难说明,但我举个例,就好容易明白了.例:我要从一个叫DA1的DataSet中复制数据到到DA2,从我们以前的开发中,最常做的,当然就是将DA1赋值给DA2(如下)

同一天空下 1428

DataSet,DataTable与DataRow复制方法

 DataSet,DataTable与DataRow的复制方法DataSet 对象是支持 ADO.NET的断开式、分布式数据方案的核心对象 ,用途非常广泛.我们很多时候需要使用其中的数据,比如取得一个DataTable的数据或者复制另一个DataTabe中的数据或者是DataRow的数据,但是只有DataSet和DataTable的复制是支持深层复制的,就是说不仅能复制元素的结构,而且能复制元

jieyulu的专栏 1379

把一个dataset的表放在另一个dataset里面_【自学C#】|| 笔记 43 DataRow和DataColumn、DataSet...

一、DataRow和DataColumn:更新数据表每个 DataSet 都是由多个 DataTable 构成的,更新 DataSet 中的数据实际上是通过更新 DataTable 来实现的。每个 DataTable 对象都是由行 (DataRow) 和列 (DataColumn) 构成的,下面分别介绍 DataRow 类和 DataColumn 类的使用。1) ...

weixin_39622891的博客 664
上一篇: 身份证号码前六位所代表的省,市,区, 以及地区编码下载
下一篇: 很好的JS验证数据
hongyanjava
博客等级 码龄17年 12粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值