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