我的DataTable dtStaff中保存的是人员表
我想找到其中某个人删除这条DataRow,代码如下:                    foreach(DataRow dr in dtStaff.Rows)
                    {
                        if(dr[0].ToString()==str)
                            dr.Delete();
                    }后来在在再使用时如下:
                    foreach(DataRow dr in dtStaff.Rows)//就报错说访问的行已删除.
                    {
                        ......
                    }请教:如何删除这一行呢

解决方案 »

  1.   

            public static int GetOpeResult(string condition)
            {
                int changedrows = -1;
                using (SqlConnection conn = new SqlConnection(userDBConString))
                {
                    try
                    {
                        conn.Open();
                        SqlCommand myCommand = new SqlCommand(condition, conn);                    SqlDataAdapter adapter = new SqlDataAdapter(myCommand);
                        changedrows = myCommand.ExecuteNonQuery();
                        conn.Close();
                        return changedrows;
                    }
                    catch
                    {
                        return -1;
                    }
                }
            }
    把SQL传进去,就可以了!这个SQL就是你根据名字删除人找到的这行数据。
      

  2.   


      foreach(DataRow dr in dtStaff.Rows)
      {
      if(dr[0].ToString()==str)
      dr.Delete();
      }   dtStaff.AcceptChanges();  //添加这一句  foreach(DataRow dr in dtStaff.Rows)
      {
      ......
      }
      

  3.   


    使用上面的代码可以达到删除的目的,但是删除后,
      foreach(DataRow dr in dtStaff.Rows)
      {
      if(dr[0].ToString()==str)
      dtStaff.Rows.Remove();//这一句执行后,报错说:集合已修改;枚举操作可能无法执行。
      }
      

  4.   

    倒着删除 for(int i=table.count - 1; i >= 0; i--)
      

  5.   


    还是用Delete()方法
    循环delete完毕,再调用下 dtStaff.AcceptChanges() 方法。
      

  6.   

    如果你集合里每次需要删除的只有一条记录;那么可以用下面的方法  foreach(DataRow dr in dtStaff.Rows)
      {
      if(dr[0].ToString()==str)
      {
        dr.Delete();
        break;
      }
      }
      

  7.   

    如果一次删除是多条,就比较麻烦一点,这是我以前的代码,供参考
                string[] removeIndexList = new string[dtDevice.Rows.Count];                        for (int i = 0; i < dtDevice.Rows.Count; i++)
                {
                    string strDeviceID = dtDevice.Rows[i]["DeviceID"].ToString();
                    if (sExecDeviceIDList.IndexOf(strDeviceID) < 0)
                    {
                        removeIndexList[i] = strDeviceID;                    
                        //dtDevice.Rows.RemoveAt(i);
                    }                
                }            for (int i = removeIndexList.Length - 1; i >= 0; i--)
                {
                    if (removeIndexList[i] == null || removeIndexList[i].Length == 0) continue;
                    dtDevice.Rows.RemoveAt(i);
                }
      

  8.   

    学习,你上一个循环找到删除,其实只是针对内存中的DataTable删除,并且真正的执行到数据库,而加上dtStaff.AcceptChanges() 是把删除动作同步到资料库中