string strQueryString = "select * from gx_xtczy";            SqlDataAdapter sqlDA = new SqlDataAdapter(strQueryString, sqlConn);
            DataSet ds = new DataSet();
            sqlDA.Fill(ds, "dt1");
            DataTable dt = ds.Tables["dt1"];            for (int j = 0; j < 3; j++)
            {
                int x = dt.Rows.Count - 1;
                for (int i = 0; i < x ; i++)
                {                    if (i % 2 == 1)
                    {
                        try
                        {
                            dt.Rows[i].Delete();
                            
                            break;
                        }
                        catch (Exception ex)
                        { }
                    }                }            }代码如上,debug进去发现每次在dt.Rows[i].Delete();后都报异常:
ItemArray “dt.Rows[i].ItemArray”引发了“System.Data.DeletedRowInaccessibleException”类型的异常 object[] {System.Data.DeletedRowInaccessibleException}base异常为:
{"不能通过已删除的行访问该行的信息。"} System.SystemException {System.Data.DeletedRowInaccessibleException}为什么呢???
换用rows.removeat(i)也是一样的报错。

解决方案 »

  1.   

    倒过来操作也是报这个异常的。很奇怪这个问题,有兴趣可以自己debug一下,总是感觉很奇怪。
      

  2.   

    忘记说了。vs2005环境
    倒过来删除的代码如下,这次换了removeat方法:SqlDataAdapter sqlDA = new SqlDataAdapter(strQueryString, sqlConn);
                DataSet ds = new DataSet();
                sqlDA.Fill(ds, "dt1");
                DataTable dt = ds.Tables["dt1"];            for (int j = 0; j < 4; j++)
                {
                    int x = dt.Rows.Count - 1;
                    for (int i = x; i >= 0 ; i--)
                    {                    if (i % 2 == 1)
                        {
                            try
                            {
                                //dt.Rows[i].Delete();
                                dt.Rows.RemoveAt(i);
                                break;
                            }
                            catch (Exception ex)
                            { }
                        }                }            }
      

  3.   

    SqlDataAdapter sqlDA = new SqlDataAdapter(strQueryString, sqlConn);
                DataSet ds = new DataSet();
                sqlDA.Fill(ds, "dt1");
                DataTable dt = ds.Tables["dt1"];            for (int j = 0; j < 4; j++)
                {
                    int x = dt.Rows.Count - 1;
                    for (int i = x; i >= 0 ; i-2)
                    {
                            try
                            {
                                //dt.Rows[i].Delete();
                                dt.Rows.RemoveAt(i);
                                break;
                            }
                            catch (Exception ex)
                            { }
                    }            }
      

  4.   

    搞错搞错,原来报异常的不是代码,而是我添加的监视dt.Rows[i]报异常。
    delete方法那段代码达不到目的,。
    要用removeat或者remove方法。
    要用delete方法的话要在delete前面加一个状态判定。。
    自己能给自己100分不?不能吧