使用DataTable.Select()时发生了奇怪的事情

本文关键字:发生了 DataTable Select 使用 | 更新日期: 2023-09-27 18:00:05

DataTable dt = new DataTable();
DataRow[] dr;
dt.Columns.Add();
dt.Columns.Add();
dt.Rows.Add(1, 1);
dt.Rows.Add(2, 2);
dt.Rows.Add(3, 3);
dr = dt.Select();
dr[1].Delete();
foreach (DataRow x in dt.Rows)
MessageBox.Show(x[0] + "   " + x[1]);

MessageBox显示"1 1"answers"3 3"。为什么会发生这种情况?我没有操作DataTable,只操作保存DataTable值的DataRow[]。那么,为什么DataTable中的值也发生了变化呢?有人能解释一下吗?

使用DataTable.Select()时发生了奇怪的事情

您正在获取对dr中所选行的引用,它们不是副本。如果删除一个,则它将从dt.rows和dr.

中消失

看看http://msdn.microsoft.com/en-us/library/system.data.datatable.acceptchanges.aspx

删除后需要调用AcceptChanges:

dt.AcceptChanges();

dr实际上引用了DataTable dt中的行。这就是它被删除的原因。

相关文章: