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 属性。

如果将对 DataTable 的 Select 方法执行多次调用,可以先为 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 开始,并且通过使用 EndEdit 或 CancelEdit 或者通过调用 AcceptChanges 或 RejectChanges 结束)的过程中,Proposed行版本会存在。

注意点:

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

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

(3) 如果在使用 EndEdit 或 CancelEdit 结束编辑之前调用 AcceptChanges,编辑将会结束,并接受 Current 和 Original 行版本的 Proposed 行值。

(4)调用 RejectChanges 也会结束编辑,并放弃 Current 和 Proposed 行版本。 在调用 AcceptChanges 或 RejectChanges 之后调用 EndEdit 或 CancelEdit 不会起作用,因为编辑已经结束。

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(); 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值