以下代码运行发生异常:
“System.Data.DeletedRowInaccessibleException”类型的未经处理的异常在 System.Data.dll 中发生
其他信息: 不能通过已删除的行访问该行的信息。
请教了,不是在DataTable.AcceptChanges()以后就可以删除行了么?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
namespace dtcopytest
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
DataColumn Column1 = new DataColumn("ID", typeof(int));
DataColumn Column2 = new DataColumn("No", typeof(int));
dt.Columns.Add(Column1 );
dt.Columns.Add(Column2);
DataRow Row1 = dt.NewRow();
Row1[0] = 0;
Row1[1] = 1;
DataRow Row2 = dt.NewRow();
Row2[0] = 4;
Row2[1] = 3;
dt.Rows.Add(Row1);
dt.Rows.Add(Row2);
dt.AcceptChanges();
Console.WriteLine("--------dt原始-------");
for (int i = 0; i < dt.Rows.Count;i++ )
{
for(int j=0; j < dt.Columns .Count ;j++)
{
Console.WriteLine(dt.Rows[i][j].ToString ());
}
}
int[,] testStr = new int[4, 2];
testStr[0, 0] = 0;
testStr[0, 1] = 1;
testStr[1, 0] = 2;
testStr[1, 1] = 3;
testStr[2, 0] = 4;
testStr[2, 1] = 5;
testStr[3, 0] = 6;
testStr[3, 1] = 7;
for (int i = 0; i < dt.Rows.Count;i++)
{
for (int j = 0; j < testStr.GetLength(0);j++ )
{
if (Convert.ToString(dt.Rows[i][0]) == Convert.ToString(testStr[j,0]))
{
dt.Rows[i].Delete();
}
}
}
dt.AcceptChanges();
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
Console.WriteLine(dt.Rows[i][j].ToString());
}
}
}
}
}
------解决思路----------------------
dt.Rows[i].Delete();
break;
------解决思路----------------------
或者 if (dt.Rows[i].RowState!=DataRowState.Deleted && Convert.ToString(dt.Rows[i][0]) == Convert.ToString(testStr[j,0]))