您的位置:首页 > 其它

DataTable 类(二)处理表中的数据

2013-12-19 16:32 435 查看


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



}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: