Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:无法通过该行访问已删除的行信息——但我想读取下一行_C#_Datatable_Rowdeleting - Fatal编程技术网

C#:无法通过该行访问已删除的行信息——但我想读取下一行

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

已获取标题显示的错误信息。但我想要的是从datatable中读取一行,插入到我的日历控件中,然后删除这一行,然后读取下一行,插入,然后删除下一行

但我犯了这个错误

下面是我的代码

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;}的数组。我解决了这个问题,只需放置一个记录每个删除操作的数组,将删除的行号放入列表中。因此,一旦循环到已删除的行,将调用一个条件以跳转到下一行。