通常我们都知道可以使用OleDbDataAdapter对象的Fill方法从数据源检索数据并填充DataSet 中的DataTable,其实我们也可以人工为DataTable添加DataRow。

一、Rows.Add和Rows.InsertAt方法

Add和InsertAt方法都可以把新行添加到DataTable。
新一个Windows应用程序,在Form1窗体拉入一个按钮和DataGridView。
在Form1代码界面添加如下代码:

Public Class Form1'声明DataTableDim dt1 As New DataTableDim dt2 As New DataTablePrivate Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load'为dt1创建结构dt1.Columns.Add("ID", Type.GetType("System.Int32"))dt1.Columns.Add("Name", Type.GetType("System.String"))'为dt1添加测试用数据Dim row As DataRowFor i As Integer = 1 To 10row = dt1.NewRowrow("ID") = irow("Name") = "Name" & i.ToString'添加新行dt1.Rows.Add(row)'插入新行'dt1.Rows.InsertAt(row, 0)NextEnd Sub
End Class

二、DataTable.Copy和DataTable.Clone方法

测试代码1:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click'复制dt1的结构和数据dt2 = dt1.Copy()'UI界面显示dt2数据DataGridView1.DataSource = NothingDataGridView1.DataSource = dt2End Sub

测试结果:

测试代码2:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click'克隆dt1的结构,包括所有DataTable架构和约束。dt2 = dt1.Clone()'UI界面显示dt2数据DataGridView1.DataSource = NothingDataGridView1.DataSource = dt2End Sub

测试结果:

三、复制DataRow

使用DataTable.Copy方法可以复制DataTable的结构和所有数据行,而有时仅需要复制其中的一行,DataRow没有Copy方法,要如何实现呢?

1、Rows.Add和Rows.InsertAt方法

测试代码1:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click'克隆dt1的结构,包括所有DataTable架构和约束。dt2 = dt1.Clone()For Each row As DataRow In dt1.Rows'报错dt2.Rows.Add(row)'dt2.Rows.InsertAt(row, 0)Next'UI界面显示dt2数据DataGridView1.DataSource = NothingDataGridView1.DataSource = dt2End Sub

测试结果:
报错:System.ArgumentException:“该行已经属于另一个表。”,如图,

测试代码2:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click'克隆dt1的结构,包括所有DataTable架构和约束。dt2 = dt1.Clone()For Each row As DataRow In dt1.Rowsdt2.Rows.Add(row.ItemArray)Next'UI界面显示dt2数据DataGridView1.DataSource = NothingDataGridView1.DataSource = dt2End Sub

测试结果:正常

2、DataTable.ImportRow方法

测试代码:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click'克隆dt1的结构,包括所有DataTable架构和约束。dt2 = dt1.Clone()For Each row As DataRow In dt1.Rowsdt2.ImportRow(row)Next'UI界面显示dt2数据DataGridView1.DataSource = NothingDataGridView1.DataSource = dt2End Sub

测试结果:正常

3、自定义复制DataRow

(1)、dt1与dt2列名称不同,但各列数据类型相同。

测试代码1:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click'为dt2创建结构dt2.Columns.Add("dt2ID", Type.GetType("System.Int32"))dt2.Columns.Add("dt2Name", Type.GetType("System.String"))For Each row As DataRow In dt1.Rowsdt2.Rows.Add(row.ItemArray)Next'UI界面显示dt2数据DataGridView1.DataSource = NothingDataGridView1.DataSource = dt2End Sub

测试结果:成功复制,如图

测试代码2:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click'为dt2创建结构dt2.Columns.Add("dt2ID", Type.GetType("System.Int32"))dt2.Columns.Add("dt2Name", Type.GetType("System.String"))For Each row As DataRow In dt1.Rowsdt2.ImportRow(row)Next'UI界面显示dt2数据DataGridView1.DataSource = NothingDataGridView1.DataSource = dt2End Sub

测试结果:行是复制过来了,但数据为null,说明该方法要求两表架构一致。如图

(2)、dt1与dt2列名称、数据类型均不同。

测试代码:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click'为dt2创建结构dt2.Columns.Add("dt2ID", Type.GetType("System.String"))dt2.Columns.Add("dt2Name", Type.GetType("System.String"))For Each row As DataRow In dt1.Rowsdt2.Rows.Add(row.ItemArray)Next'UI界面显示dt2数据DataGridView1.DataSource = NothingDataGridView1.DataSource = dt2End Sub

测试结果:成功复制,可见ItemArray属性的兼容很强。

(3)、dt2的列数比dt1少

测试代码1:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click'为dt2创建结构dt2.Columns.Add("dt2ID", Type.GetType("System.String"))For Each row As DataRow In dt1.Rowsdt2.Rows.Add(row.ItemArray)Next'UI界面显示dt2数据DataGridView1.DataSource = NothingDataGridView1.DataSource = dt2End Sub

测试结果:报错——System.ArgumentException:“输入数组长度大于此表中的列数。如图

测试代码2:真正的自由自在的自定义复制

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click'为dt2创建结构dt2.Columns.Add("dt2ID", Type.GetType("System.String"))dt2.Columns.Add("myColumn", Type.GetType("System.String"))dt2.Columns.Add("dt2Name", Type.GetType("System.String"))Dim newrow As DataRowFor Each row As DataRow In dt1.Rowsnewrow = dt2.NewRownewrow("dt2ID") = row("ID")newrow("dt2Name") = row("Name")dt2.Rows.Add(newrow)Next'UI界面显示dt2数据DataGridView1.DataSource = NothingDataGridView1.DataSource = dt2End Sub

测试结果:复制成功。如图

以上测试希望能给各看官一些启示。

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

  1. loadrunner 操作mysql_loadrunner学习笔记(从MYSQL中取数据)

    先声明,目前属于学了没几天的新手,以下部分都是自己研究加上网上资料所得,如果有问题请各位达人指出. 前一阵子写了一段调用MYSQL的测试代码.功能很简单,就是从数据库里取数据,然后打印出来.算是为以后 ...

  2. [MATLAB学习笔记]textread读取文本文件中的数据;写入多个输出

    语法 [A,B,C,...] = textread(filename,format) [A,B,C,...] = textread(filename,format,N) [...] = textrea ...

  3. 《工程电磁场》学习笔记7-均匀传输线中的导行电磁波

    目录 无耗均匀传输线方程 无耗均匀传输线的传播特性 无损耗传输线中波的反射和透射 传输线的工作状态 无耗传输线的入端阻抗 无耗均匀传输线的阻抗匹配 无耗均匀传输线方程 均匀传输线: 传输材料.横截面形 ...

  4. JS学习笔记六:js中的DOM操作

    1. JS学习笔记六:js中的DOM操作 文章目录 1. JS学习笔记六:js中的DOM操作 1.1. 获取Dom节点 1.2. 元素属性的操作方式 1.3. DOM节点的创建.插入和删除 1.4. ...

  5. VB.NET学习笔记:ADO.NET操作ACCESS数据库——OleDbDataAdapter的Update方法更新数据库的秘密(行状态RowState和行版本 DataRowVersion)

    在<数据集DataSet数据管理(DataAdapter查询更新数据库)>一文中提到可以使用OleDbDataAdapter对象的Update方法还可将对 DataSet 所做的更改解析回 ...

  6. 【Machine Learning 学习笔记】feature engineering中noisy feature的影响

    [Machine Learning 学习笔记]feature engineering中noisy feature的影响 通过本篇博客记录一下添加噪声对Lasso和SVM的影响,采用的数据集为sklea ...

  7. Java快速入门学习笔记9 | Java语言中的方法

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  8. Java快速入门学习笔记8 | Java语言中的数组

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  9. Java快速入门学习笔记7 | Java语言中的类与对象

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

最新文章

  1. 因脉脉上的匿名消息,拼多多员工被开除了!
  2. Visual Studio:error MSB8020
  3. 关于 Error: No PostCSS Config found in 的错误
  4. Vjios P1736 铺地毯【暴力,思维】
  5. CCF 201412-1 门禁系统
  6. 将connection存放在Threadlocal里和数据库连接池的区别
  7. python写水仙花数
  8. MATLAB中调用eemd函数
  9. [leetcode题解] 第995题Minimum Number of K Consecutive Bit Flips
  10. html背景图片循环自动播放,CSS3 背景图循环播放
  11. Spring Cloud Bus 使用说明
  12. Python:绘制数学图形
  13. 沐神点赞!同济子豪兄精读AI经典论文,包括图像分类、目标检测、生成对抗网络、轻量化卷积神经网络等领域...
  14. transformer论文研读
  15. java按照多个分隔符分割字符串
  16. U盘安装OS X Yosemite 10.10.5系统
  17. nargin函数的用法
  18. EASYRECOVERY_3.3.29包含注册机、都教授数据恢复含注册码
  19. 2022年,关于副业赚钱和自主创业的一些建议
  20. 如何使用setoolkit实施钓鱼攻击

热门文章

  1. 微信公众平台搭建与开发(一)基本搭建和编辑模式
  2. 分布式存储与传统存储架构
  3. 算法图解读书笔记:附程序
  4. CDR X8(CorelDRAW)安装下载不了,由于您已安装了另一版本图文详解教程
  5. go build 无文件_小心go.mod中的go directive
  6. 中国正式进入“鬼城”时代
  7. macbook m1 无法启动mysql服务
  8. VS2017下getcwd()函数“E0020未定义标识符;getcwd() 错误C3861“getcwd”: 找不到标识符”解决办法
  9. IDRISI Andes V15.0 (交互式GIS和影像处理)\
  10. Oracle 11g安装过程出现“未找到文件”