从 DataTable 对象中删除 DataRow 对象 遇到的问题
来源:互联网 发布:淘宝怎么升买家信用 编辑:程序博客网 时间:2024/05/05 04:11
我用DataTable的DataRow.Delete方法从表中删除一行时,界面是自动更新了(移除了刚才删除的行),DataRow.Count减了1,但是这时再次循环访问该DataTable,则抛出“不能通过已删除的行访问。。。”异常。在调试状态下查看DataTable删除操作后的数据显示,刚才删除行的位置确实没有数据,但该行并没有真正的删除,仍然占据着位置,所以再次循环访问到这行的时候会抛出异常。
用于从 DataTable 对象中删除 DataRow 对象的方法有两种:DataRowCollection 对象的 Remove 方法和 DataRow 对象的 Delete 方法。Remove 方法从 DataRowCollection 中删除 DataRow,而 Delete 方法只将行标记为删除。当应用程序调用 AcceptChanges 方法时,才会发生实际的删除。通过使用 Delete,您可以在实际删除之前先以编程方式检查哪些行标记为删除。如果将行标记为删除,其 RowState 属性会设置为 Deleted。
在将 DataSet 或 DataTable 与 DataAdapter 和关系型数据源一起使用时,用 DataRow 的 Delete 方法移除行。Delete 方法只是在 DataSet 或 DataTable 中将行标记为 Deleted,而不会移除它。而 DataAdapter 在遇到标记为 Deleted 的行时,会执行其 DeleteCommand 方法以在数据源中删除该行。然后,就可以用 AcceptChanges 方法永久移除该行。如果使用 Remove 删除该行,则该行将从表中完全移除,但 DataAdapter 不会在数据源中删除该行。
{
// Create a simple DataTable with two columns and ten rows.
DataTable table = new DataTable("table");
DataColumn idColumn = new DataColumn("id",
Type.GetType("System.Int32"));
idColumn.AutoIncrement=true;
DataColumn itemColumn = new DataColumn("item",
Type.GetType("System.String"));
table.Columns.Add(idColumn);
table.Columns.Add(itemColumn);
// Add ten rows.
DataRow newRow;
for(int i = 0; i <10; i++)
{
newRow = table.NewRow();
newRow["item"] = "Item " + i;
table.Rows.Add(newRow);
}
table.AcceptChanges();
DataRowCollection itemColumns = table.Rows;
itemColumns[0].Delete();
itemColumns[2].Delete();
itemColumns[3].Delete();
itemColumns[5].Delete();
Console.WriteLine(itemColumns[3].RowState.ToString());
// Reject changes on one deletion.
itemColumns[3].RejectChanges();
// Change the value of the column so it stands out.
itemColumns[3]["item"] = "Deleted, Undeleted, Edited";
// Accept changes on others.
table.AcceptChanges();
// Print the remaining row values.
foreach(DataRow row in table.Rows)
{
Console.WriteLine(row[0] + "/table" + row[1]);
}
}
- 从 DataTable 对象中删除 DataRow 对象 遇到的问题
- C#从 DataTable 对象中删除 DataRow 对象 遇到的问题
- 将DataGridView中的行对象(DataGridViewRow)转为DataTable的行对象(DataRow)
- 【转载】如何从一个DataTable中添加到属于另一个DataTable的 DataRow
- DataTable中对DataRow的操作
- C# DataTable 中DataRow的RowState
- ADO.NET非连接类(一)关于DataTable、DataColumn和DataRow对象的创建
- 绑定数组对象DataTable.Select返回值DataRow[]
- Datatable转为List<T> / DataRow转为实体类对象
- 绑定数组对象DataTable.Select返回值DataRow[]
- 用反射将DataTable的一行DataRow构建为一个自定义类的对象 - 给对象的属性赋值
- 怎样向DataTable中添加属于另一个DataTable的DataRow
- 关于Datatable的Datarow
- Hibernate 删除对象关联集合遇到的问题
- JS中对象的循环删除问题
- 数据库记录的添加、修改、删除(DataAdapter、DataTable 、DataRow )
- 将DataTable转换为List<T>对象遇到问题:类型“System.Int64”的对象无法转换为类型“System.Int32”
- DataTable对象的行操作问题
- Singleton 模式
- 金融危机下的网络新经济—外快篇
- VC操作Excel——插入图片以及对图片的修改
- 自己养的第一条牛
- 指针初试化
- 从 DataTable 对象中删除 DataRow 对象 遇到的问题
- UNIX的用户提示符
- SqlDataReader 用法(C#)
- .net学习笔记
- MOSS应用记录--3
- 又开始编程了
- 测试一下
- 浙商的22条"商业军规"
- 在vc++中调用Excel,怎样设置单元格的格式可以得到科学计数法显示,且保留两位小数