表中有一个字段BoxId,但不是主键,现在要删除所有BoxId = 10009的数据,
int countshow = dtShow.Rows.Count;
 for (int i = 0; i < countshow; i++)
    if(dtShow.Rows[i].RowState != DataRowState.Deleted 
              && (dtShow.Rows[i]["BoxId"].ToString() == "10009")
 dtShow.Rows[i].Delete();
但是总是提示“不能通过已删除的行访问该行的信息”的错误,不知应该如何处理才好啊,总觉得这方法很笨,愿高人指点一下,能给出更好的删除办法也好,谢谢了。 

解决方案 »

  1.   

    dtShow.Rows.Remove(dtShow.Select("BoxId='10009'"));这样试下
      

  2.   

    这样直接给删除了,那这样也能更新数据库?
    我只希望标记为Delete状态就行了,因为后来要用到da.Update(dtShow),直接删除了是不是就不能更新了?
      

  3.   

    dtShow.Rows.Remove(dtShow.Select("BoxId='10009'")); 
    这是不对的,只能清除一个DataRow,不能清除多个。BoxId = 10009的记录可能有多个。
      

  4.   

    good good study, day day up.....
      

  5.   

    你的是B/S的吗,你可以在前面加一个checkbox列,选中那行,把这行的id记录下来,删除
      

  6.   

    int i = 0;
    while (i < dtShow.Rows.Count)
    {
        if(dtShow.Rows[i]["BoxId"].ToString() == "10009")
        {
             dtShow.Rows[i].Delete();
             continue;
        }
        i++;
    }
      

  7.   

    int countshow = dtShow.Rows.Count;
         for (int i = countshow-1; i >= 0; i--)
            if(dtShow.Rows[i].RowState != DataRowState.Deleted 
                  && (dtShow.Rows[i]["BoxId"].ToString() == "10009")
             dtShow.Rows[i].Delete();
    有时候倒着循环可以,你调一下试试吧。从表的后面开始删除。