(求助)集合已修改;枚举操作可能不会执行

nosuchtracter 2007-07-02 02:12:03
我把俩个DataTable组合成一个table
然后对table进行循环时,提示说
集合已修改;枚举操作可能不会执行
for(int m=0;m<count ;m++ )
{
DataRow dr = table.Rows[m]; //这一句提示

大家帮忙看看
...全文
231 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
nosuchtracter 2007-07-02
  • 打赏
  • 举报
回复
搞顶了,要这样写才可以循环
for(int k=delList.Count-1;k>=0 ;k--)
{
int index = Convert.ToInt32 (delList[k]);
table.Rows.RemoveAt (index);
}
table.AcceptChanges ();
给分
nosuchtracter 2007-07-02
  • 打赏
  • 举报
回复
ArrayList delList = new ArrayList ();
for(int m=0;m<count ;m++ )
{
delList.Add (m);
}
for(int k=0;k<delList.Count ;k++)
{
int index = Convert.ToInt32 (delList[k]);
table.Rows.RemoveAt (index);
}
table.AcceptChanges ();
上面那个写错了,但是这样写也是不行,还是提示说没有任何行
nosuchtracter 2007-07-02
  • 打赏
  • 举报
回复
for(int m=0;m<count ;m++ )
{
array += m.ToString ()+",";
}
string[] arr = array.TrimEnd (',').Split (new char []{','});
for(int k=0;k<arr.Length ;k++)
{
if(table.Rows [k]!=null)
{
table.Rows [k].Delete (); //这一句还是提示没有任何行
}
}
-过客- 2007-07-02
  • 打赏
  • 举报
回复
DataRow dr = table.Rows[m];
直接在这一句就报错了
---------------
不是直接就在这句报错,是在你对集合修改之后才报的错,你在for(int m=0;m<count ;m++ )上设个断点,跟踪一下就知道什么时候报错了

建议处理方法同上,先记录,然一次性删除
jimu8130 2007-07-02
  • 打赏
  • 举报
回复
建议你的做法,你先循环一次然后将需要删除的id全都记录到一个string 数组里面去,接着通过string数组来删除相应行
nosuchtracter 2007-07-02
  • 打赏
  • 举报
回复
System.IndexOutOfRangeException: 在位置 8 处没有任何行。
因为删除一行了,所以Rows.Count就少了一行
删除一行了,如何再次循环呢?
请教
nosuchtracter 2007-07-02
  • 打赏
  • 举报
回复
DataRow dr = table.Rows[m];
直接在这一句就报错了
if(table.Rows[m]==null)这句通不过
amandag 2007-07-02
  • 打赏
  • 举报
回复
在你的循环中不能再次改变集合的大小
jimu8130 2007-07-02
  • 打赏
  • 举报
回复
比如你原来有9行数据,但是你循环中删除了一行,那么a[8]其实就定位不了原来的第9行数据了!
jimu8130 2007-07-02
  • 打赏
  • 举报
回复
汗,你又对这个进行删除了,那么循环通过判断count就不行了!
你应该在程序的最前面写
DataRow dr = table.Rows[m];
if(dr == null)
break;
nosuchtracter 2007-07-02
  • 打赏
  • 举报
回复

for(int m=0;m<count ;m++ )
{
DataRow dr = table.Rows[m];
string[] processdep = dr["ProcessingDep"].ToString ().Split (',');
int Flag =0;
string dd = dr["Processing"].ToString ();
int d= dr["Processing"].ToString ().IndexOf (DepartmentName);
for(int j=0;j<processdep.Length ;j++)
{
if(processdep[j]==depId.ToString ())
{
Flag=1;
break;
}
}
if(Flag==0)
{
//table.Rows .Remove (dr);
dr.Delete ();
}
else

if(dr["Processing"].ToString ().IndexOf (DepartmentName)>=0)
{
dr.Delete ();
}
}
nosuchtracter 2007-07-02
  • 打赏
  • 举报
回复
for(int m=0;m<count ;m++ )
{
DataRow dr = table.Rows[m];
string[] processdep = dr["ProcessingDep"].ToString ().Split (',');
int Flag =0;
string dd = dr["Processing"].ToString ();
int d= dr["Processing"].ToString ().IndexOf (DepartmentName);
for(int j=0;j<processdep.Length ;j++)
{
if(processdep[j]==depId.ToString ())
{
Flag=1;
break;
}
}
if(Flag==0)
{
//table.Rows .Remove (dr);
dr.Delete ();
}
else

if(dr["Processing"].ToString ().IndexOf (DepartmentName)>=0)
{
dr.Delete ();
}
}
我把一些不符合条件的从table里删除了
liqiang8 2007-07-02
  • 打赏
  • 举报
回复
表table只有9行,没有第10行,你那个count大了.你仔细跟踪检查一下.
-过客- 2007-07-02
  • 打赏
  • 举报
回复
DataRow dr = table.Rows[m];

这行代码下面是不是对table进行什么修改操作了

前后的相关代码都贴一下看看
nosuchtracter 2007-07-02
  • 打赏
  • 举报
回复
System.IndexOutOfRangeException: 在位置 9 处没有任何行。
有的报这个错误

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧