C#:无法通过该行访问已删除的行信息——但我想读取下一行
已获取标题显示的错误信息。但我想要的是从datatable中读取一行,插入到我的日历控件中,然后删除这一行,然后读取下一行,插入,然后删除下一行 但我犯了这个错误 下面是我的代码C#:无法通过该行访问已删除的行信息——但我想读取下一行,c#,datatable,rowdeleting,C#,Datatable,Rowdeleting,已获取标题显示的错误信息。但我想要的是从datatable中读取一行,插入到我的日历控件中,然后删除这一行,然后读取下一行,插入,然后删除下一行 但我犯了这个错误 下面是我的代码 for (int i = 0; i < dtRowCount; i++) { var tempName = tempDT.Rows[i]["IDENT"].ToString(); c = new Contact(); c.F
for (int i = 0; i < dtRowCount; i++)
{
var tempName = tempDT.Rows[i]["IDENT"].ToString();
c = new Contact();
c.FirstName = tempDT.Rows[0]["IDENT"].ToString();
c.Tag = tempDT.Rows[0]["EVENT_ID"].ToString();
_calendar.Schedule.Contacts.Add(c);
_calendar.Contacts.Add(c);
for (int j = 0; j < dtRowCount; j++)
{
if (tempName == tempDT.Rows[j]["TAG_IDENT"].ToString())
{
#region Appointment
var app = new Appointment();
app.HeaderText = tempDT.Rows[i]["NAME"].ToString();
exlStarTime = tempDT.Rows[i]["START"].ToString();
DateTime myStartDate = DateTime.ParseExact(exlStarTime,
"dd-MMM-yy hh.mm.ss.fffffff00 tt",
System.Globalization.CultureInfo.InvariantCulture);
exlEndTime = tempDT.Rows[i]["END"].ToString();
DateTime myEndDate = DateTime.ParseExact(exlEndTime,
"dd-MMM-yy hh.mm.ss.fffffff00 tt",
System.Globalization.CultureInfo.InvariantCulture);
app.Tag = tempDT.Rows[i]["TYPE_CODE"].ToString();
app.StartTime = myStartDate;
app.EndTime = myEndDate;
app.Contacts.Add(c);
_calendar.Schedule.Items.Add(app);
ItemStyle style = app.Style;
style.HeaderTextColor = Color.White;
style.Brush.Image = "none";
switch (tempDT.Rows[i]["EVENT_TYPE_CODE"].ToString())
{
case event1Color:
style.Brush.Color = Color.OrangeRed;
break;
case event2Color:
style.Brush.Color = Color.Orange;
break;
case event3Color:
style.Brush.Color = Color.DodgerBlue;
break;
}
#endregion
tempDT.Rows[j].Delete();
//j = j - 1;
j = j + 1;
}
}
}
for(int i=0;i
big thx我认为问题是由于您正在修改迭代的集合。 最简单的修复方法是分两步进行。
首先在日历中插入所有需要的内容,然后在完成插入后开始删除它们。这是因为删除所有行后需要调用AcceptChanges()方法
tempDT.AcceptChanges();
我希望这对你有用 因为对于每个联系人,我可能有多个约会时间范围,例如:Tom的约会A从5月到6月,约会B从8月到10月。如果在循环中加载重复值,我需要在将其插入日历后删除该行。我不完全理解手头的问题,但我或多或少地认为,如果您有跟踪哪些约会已经处理,哪些尚未处理的问题,您可以为每个约会使用一个变量来标记该约会是否已处理。让我们以另一种方式讨论一下,如何检测指定行是否已被删除?我试图使用“tempDT.Rows[I].IsNull(“TAG_IDENT”)”,但如果该行已被删除,则会弹出错误信息:“无法通过该行访问已删除的行信息”,因为“tempDT.Rows[I]”不存在。删除行后,您当然无法知道该行的存在,除非你有其他的数据结构来记忆以前的状态。例如,您可以保留一个类deletedRow{string idRow;bool deleted;}的数组。我解决了这个问题,只需放置一个记录每个删除操作的数组,将删除的行号放入列表中。因此,一旦循环到已删除的行,将调用一个条件以跳转到下一行。