DataTable 类(二)处理表中的数据-程序员宅基地

1、添加数据

(1)NewRow 方法来创建新行

DataRow workRow = workTable.NewRow();

//使用索引或列名来处理新添加的行,下面两行代码等价

workRow["CustLName"] = "Smith";
workRow[1] = "Smith";

//Add 方法可用于将行添加到 DataRowCollection

workTable.Rows.Add(workRow);

(2)通过传入值的数组(类型化为 Object),调用 Add 方法来添加新行

将类型化为 Object 的值的数组传递到 Add 方法,可在表内创建新行并将其列值设置为对象数组中的值。 请注意,数组中的值会根据它们在表中出现的顺序相继与各列匹配。

workTable.Rows.Add(new Object[] {1, "Smith"});

2、查看表中数据

(1)Select 方法

DataTable 对象的 Select 方法返回一组与指定条件匹配的 DataRow 对象。 Select 接受筛选表达式、排序表达式和 DataViewRowState 的可选参数。 筛选表达式根据 DataColumn 值(例如 LastName = 'Smith')标识要返回的行。 排序表达式遵循用于为列排序的标准 SQL 约定,例如 LastName ASC, FirstName ASC。 有关编写表达式的规则,请参见 DataColumn 类的 Expression 属性。

如果将对 DataTableSelect 方法执行多次调用,可以先为 DataTable 创建 DataView 以提高性能。

A:Select 方法重载

Select()获取所有 DataRow 对象的数组。
Select(String)按照主键顺序(如果没有主键,则按照添加顺序)获取与筛选条件相匹配的所有 DataRow 对象的数组。
Select(String, String)获取按照指定的排序顺序且与筛选条件相匹配的所有 DataRow 对象的数组。
Select(String, String, DataViewRowState)获取与排序顺序中的筛选器以及指定的状态相匹配的所有 DataRow 对象的数组。

B: DataViewRowState 值

CurrentRows  当前行,包括未更改的行、已添加的行和已修改的行。

Deleted  已删除的行。

ModifiedCurrent  当前版本,它是原始数据的修改版本

ModifiedOriginal  所有已修改行的原始版本。

Added  新行。

None  无。

OriginalRows  原始行,包括未更改的行和已删除的行。

Unchanged   未更改的行。

C:

DataRow[] currentRows = workTable.Select(null, null, DataViewRowState.CurrentRows);
if (currentRows.Length < 1 )
Console.WriteLine("No Current Rows Found");
else
{
foreach (DataColumn column in workTable.Columns)
Console.Write("/t{0}", column.ColumnName);
Console.WriteLine("/tRowState");
foreach (DataRow row in currentRows)
{
foreach (DataColumn column in workTable.Columns)
Console.Write("/t{0}", row[column]);
Console.WriteLine("/t" + row.RowState);
}
}

(2)Rows 和 Columns 集合来访问

DataTable dt = dataSet.Tables[0];

for(int i = 0 ; i < dt.Rows.Count ; i++)

{

   string strName = dt.Rows[i]["字段名"].ToString();

}

foreach(DataRow myRow in myDataSet.Tables["temp"].Rows)

{

      var str = myRow[0].ToString();

}

3、DataTable 编辑

在 DataRow 中更改列值时,所做更改会立即置于行的当前状态中。 然后,DataRowState 会设置为 Modified,并使用 DataRow 的 AcceptChanges 或 RejectChanges 方法来接受或拒绝所做更改。 DataRow 还提供了三种可用于在编辑行时将行的状态挂起的方法。 这三个方法是 BeginEdit、EndEdit 和 CancelEdit。

在执行编辑操作(通过调用 BeginEdit 开始,并且通过使用 EndEditCancelEdit 或者通过调用 AcceptChangesRejectChanges 结束)的过程中,Proposed 行版本会存在。

注意点:

(1)可以通过调用 EndEdit 来确认编辑,也可以通过调用 CancelEdit 来取消编辑。

(2) 尽管 EndEdit 确实已确认所做的编辑,但在调用 AcceptChanges 之前,DataSet 并没有实际接受更改。

(3) 如果在使用 EndEditCancelEdit 结束编辑之前调用 AcceptChanges,编辑将会结束,并接受 CurrentOriginal 行版本的 Proposed 行值。

(4)调用 RejectChanges 也会结束编辑,并放弃 CurrentProposed 行版本。 在调用 AcceptChangesRejectChanges 之后调用 EndEditCancelEdit 不会起作用,因为编辑已经结束。

DataTable workTable = new DataTable();
workTable.Columns.Add("LastName", typeof(String));
workTable.ColumnChanged +=
new DataColumnChangeEventHandler(OnColumnChanged);
DataRow workRow = workTable.NewRow();
workRow[0] = "Smith";
workTable.Rows.Add(workRow);
workRow.BeginEdit();
// Causes the ColumnChanged event to write a message and cancel the edit.
workRow[0] = "";
workRow.EndEdit();
// Displays "Smith, New".
Console.WriteLine("{0}, {1}", workRow[0], workRow.RowState);
protected static void OnColumnChanged(
Object sender, DataColumnChangeEventArgs args)
{
if (args.Column.ColumnName == "LastName")
if (args.ProposedValue.ToString() == "")
{
Console.WriteLine("Last Name cannot be blank. Edit canceled.");
args.Row.CancelEdit();
}
}

转载于:https://www.cnblogs.com/dyufei/archive/2009/12/14/2573955.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30426879/article/details/98449288

智能推荐

view滑动冲突解决实战篇2(外部拦截法)_viewpage2外部拦截事件-程序员宅基地

文章浏览阅读1.1k次。继上篇内部拦截法需求还是跟上篇一样。只不过这次用外部拦截法来解决;只要在父容器添加如下代码就可以解决了滑动冲突,很简单,套模板就行 // 分别记录上次滑动的坐标(onInterceptTouchEvent) private int mLastXIntercept = 0; private int mLastYIntercept = 0; @Override public bo_viewpage2外部拦截事件

汇编 堆栈 变量存储 指针_汇编语言栈指针-程序员宅基地

文章浏览阅读2.5k次,点赞7次,收藏9次。本文章系作者原创,未经许可,不得转载。汇编 堆栈 变量存储 指针先说栈的概念,栈其实也是一种。。。。。先说内存的概念吧。。。。。额 先说计算机吧,简单来说的话,可以把计算机理解成由CPU,内存,硬盘组成,而CPU内部又包括一种叫做内部寄存器的东西,包括 数据寄存器: AX,BX,CX,DX; 段寄存器: CS,DS,ES,SS; 指针与变址寄存器SP,BP,SI,DI; ..._汇编语言栈指针

架构师之路:从码农到架构师你差了哪些_web架构师-程序员宅基地

文章浏览阅读1w次,点赞14次,收藏56次。转载自 架构师之路:从码农到架构师你差了哪些 Web应用,最常见的研发语言是Java和PHP。 后端服务,最常见的研发语言是Java和C/C++。 大数据,最常见的研发语言是Java和Python。 可以说,Java是现阶段中国互联网公司中,覆盖度最广的研发语言,掌握了Java技术体系,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能有立足之地。有..._web架构师

js sort排序_sort a<b-程序员宅基地

文章浏览阅读103次。/* 排序 >号 从小到大排序 <从大到小排序 */ list.sort(function(a, b) { return a.date < b.date ? 1 : -1; })如果是简单的list就直接 return a < b ? 1 : -1;即可,如果是list里面套的map,可让list按map里面的指定字段进行排揎。..._sort a

前端设置条件限制form表单提交到后端解决方案_jsp前端页面将表单是否提交成功作为限制条件-程序员宅基地

文章浏览阅读375次。<script src="js/jquery-1.8.3.min.js" type="text/javascript"></script> <script type="text/javascript"> function checkName() { var name = document.getElementB..._jsp前端页面将表单是否提交成功作为限制条件

计算机网络sequence number,TCP协议中SequenceNumber和Ack Numbe-程序员宅基地

文章浏览阅读1k次。Sequence Numberlzyws7393074532892018-04-25Number Sequenceqq_391789932452017-09-21理解TCP序列号(Sequence Number)和确认号(Acknowledgment Number)hebbely9822017-01-14Number Sequence(规律)l25336363712902017-07-18Numb..._ack num

随便推点

Z-Blog编辑器支持ppt导入-程序员宅基地

文章浏览阅读47次。图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码目前限chrome浏览器使用首先以um-editor的二进制流保存为例:打开umeditor.js,找到UM.plugins['autoupload'],然后找到autoUploadHandler方法,注释掉其中的代码。加入下面的代码://判断剪贴板的内容是否包含文本//首先解释一下为什么要判断文本是不是为空//在ctrl+c word中的文字或者图片之后会返回1种(image/png)或者4种t

基于Unity3D的相机功能的实现(六)—— 上帝视角(王者荣耀视角)_unity overlook-程序员宅基地

文章浏览阅读4k次,点赞2次,收藏15次。在MOBA游戏中,上帝视角是一个很实用的功能。_unity overlook

用mac的chrome浏览器调试Android手机的网页-程序员宅基地

文章浏览阅读2.5k次,点赞2次,收藏2次。一、参考链接read chrome remote debugging documentation调出开发者选项二、设置android在安卓4.2及更新的版本中,默认情况下,【开发者选项】是隐藏的。要启用【开发者选项】,设置 -> 关于手机 -> 版本号,对着版本号点击7次。设置 -> 开发者选项 -> USB调试三、连接手机和电脑..._小米13链接mac chrome inspect

树莓派GPIO简单操作_树莓派怎么读取gpio口上的信息-程序员宅基地

文章浏览阅读637次。树莓派的GPIO操作被抽象为文件读写,下面以一个例子来说明GPIO操作。_树莓派怎么读取gpio口上的信息

【汽车电子】浅谈车载系统QNX_车机qnx虚拟化软件系统架构-程序员宅基地

文章浏览阅读1.7k次。QNX是一种商用的遵从POSIX规范的类Unix实时操作系统,目标市场主要是面向嵌入式系统。它可能是最成功的微内核操作系统之一。QNX是一种商用的类Unix实时操作系统,遵从POSⅨ规范,目标市场主要是嵌入式系统[1]。QNX成立于1980年,是加拿大一家知名的嵌入式系统开发商。QNX的应用范围极广,包含了:控制保时捷跑车的音乐和媒体功能、核电站和美国陆军无人驾驶Crusher坦克的控制系统[2],还有RIM公司的BlackBerry PlayBook平板电脑。_车机qnx虚拟化软件系统架构

信号发生器设计VHDL代码Quartus仿真_vhdl正弦波信号发生器-程序员宅基地

文章浏览阅读1k次,点赞20次,收藏22次。代码功能:信号发生器设计信号发生器由波形选择开关控制波形的输出,分别能输出正弦波、方汉和三角波三种波形,波形的周期为2秒(由40M有源晶振分频控制)。考虑程序的容量,每种波形在一个周期内均取16个取样点,每个样点数据是8位(数值范围:00000000~1111111)要求将D/A变换前的8位二进数据(以十进制方式)输出到数码管动态演示出来。_vhdl正弦波信号发生器