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

时间:2011-06-22 12:11:15

标签: c#

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”和“3 3”。为什么会这样?我没有操纵DataTable,只是DataRow []来保存DataTable的值。那么为什么DataTable中的值也发生了变化?有人可以解释一下吗?

3 个答案:

答案 0 :(得分:2)

您正在获取dr中所选行的引用,它们不是副本。如果删除一个,那么它就会从dt.rows and dr。

消失

答案 1 :(得分:0)

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

您需要在删除后调用AcceptChanges:

dt.AcceptChanges();

答案 2 :(得分:0)

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