【发布时间】:2013-10-22 09:18:36
【问题描述】:
数据表 DT
num type name
===================================
001 A Peter
002 A Sam
003 B John
public static void fun1(ref DataTable DT, String TargetType)
{
for (int i = 0; i < DT.Rows.Count; i++)
{
string type = DT.Rows[i]["type"];
if (type == TargetType)
{
/**Do Something**/
DT.Rows[i].Delete();
}
}
DT.AcceptChanges();
}
我的函数根据 TargetType 获取数据表中的特定数据行,并使用它们的信息来做某事。数据行被读取(匹配目标类型)后,将被删除。
但是,.Delete() 执行后该行立即被删除,因此下一行(按 i)的位置不正确。
例如,如果 TargetType 为 A。当 i=0 时,执行 .Delete 后删除“Peter”行。然后当 i=1 时,我想它会定位到“Sam”行,但它实际上定位到了“John”行,因为“Peter”行被删除了。
我的代码有问题吗?
【问题讨论】:
-
我认为当 type==TargetType 并且它删除该行时,您应该将 i 的值减 1,以便当它删除 i=0 时,1=1 处的行移动到 i= 0 然后它会检查并删除该行,如果 i=0 处的行删除,则需要再进行一次检查,而不是递减,您应该设置 i=0 的值。