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/p/2573955.html