c如果定子断开环路,则执行此操作

本文关键字:执行 操作 环路 如果 断开 | 更新日期: 2023-09-27 18:25:53

数据源:包含员工信息的数据表

我试图按员工姓名对数据进行分组,然后输出员工姓名,并在其下方输出与该员工相关的记录,并且仅输出该员工的记录。

我在嵌套的for each中有一个if语句,它在另一个for each内(我也尝试了正则for循环)。if语句将员工名称与其迭代的当前名称进行比较,如果为true,则输出记录的信息。这对于每个员工的第一次记录都非常有效。在每个员工的第一次迭代之后,它中断了,消除过程向我表明这是因为if语句。这就像使用if语句打断循环一样。


public String GroupAndSortTableData(DataTable thisDataTable)
    {
        //detailActivitiesDataTable datatable column key
        //0 = currentID, 1 = formerID, 2 = Description, 3 = MonthID, 4 = Year, 5 = CreatedBy, 6 = CreatedOn, 7 = ModifiedBy, 
        //8 = ModifiedOn, 9 = UserID, 10 = Signed, 11 = Type, 12 = Software, 13 = Activity, 14 = DeleteFlag, 15 = DeletedBy, 16 = DeletedOn
        //17 = UserName, 18 = SortName, 19 = FullName
        try
        {
            System.Text.StringBuilder strReport = new System.Text.StringBuilder();
            //get unique values in the SortName column of detailActivitiesDataTable
                         group row by row.Field<string>("SortName") into grp
                         select new
                         {
                             SortName = grp.Key,
                             //MemberCount = grp.Count()
                         };
            strReport.AppendLine("<table width='800px' class='light' cellspacing='0' cellpadding='0' border='0'><tr><th align='left' colspan='4'> A C T I V I T I E S</th></tr></table>");
            strReport.AppendLine("<table width='800px' class='light' cellspacing='0' cellpadding='0' border='0'><tr><th align='left' colspan='4'><hr></th></tr></table>");
            //display a subheader bar for each name in the data
            foreach (var uniqueName in result)
            {
                //testing messagebow works in localhost only    
                strReport.AppendLine("<table class='dark' width='800px'><tr><th colspan='4' align='left'>" + uniqueName.SortName + "</th></tr>");
                strStaffActivities.AppendLine("<tr><td colspan='4' align='left'><hr width='800px'></td></tr>");
                strReport.AppendLine("<tr>"
                                                + "<td class='lightHeader2' width='150'>Type</td>"
                                                + "<td class='lightHeader2' width='150'>Activity</td>"
                                                + "<td class='lightHeader2' width='150'>Software</td>"
                                                + "<td class='lightHeader2' width='350'>Description</td>"
                                                + "</tr></table>");
                strReport.AppendLine("<table class='light' width='800px'>");
                //loop through the rows of the datatable 
                foreach(DataRow dtRow in thisDataTable.Rows)
                {
                    //if it matches the username display the content
                    if (dtRow[18] == uniqueName.SortName)
                    {
                        strReport.AppendLine("<tr>");
                        strReport.AppendLine("<td class='light' width='150'>" + dtRow[11] + "</td>");
                        strReport.AppendLine("<td class='light' width='150'>" + dtRow[13] + "</td>");
                        strReport.AppendLine("<td class='light' width='150'>" + dtRow[12] + "</td>");
                        strReport.AppendLine("<td class='light' width='350'>" + dtRow[2] + "</td>");
                        strReport.AppendLine("<td class='light' width='350'>" + dtRow[18] + "</td>");
                        strReport.AppendLine("<td class='light' width='350'>" + uniqueName.SortName + "</td>");
                        strReport.AppendLine("</tr>");
                    }
                    else
                        continue;
                }
            }
            strReport.AppendLine("</table>");
            return strReport.ToString();
        }
        catch (Exception eGroupActivitiesDetail)
        {
            var resultException = MessageBox.Show("Exception occurred while grouping and sorting data." + eGroupActivitiesDetail);
            return "failure";
        }
    }

c如果定子断开环路,则执行此操作

如果if语句的条件包含触发异常的指令,则它可以"中断循环"。

如果dtRow在索引18处没有元素,那么您的if (dtRow[18] == uniqueName.SortName)很可能会生成"索引越界"异常。在引用索引之前,应该添加一个检查以查看索引是否有效,以避免引发异常。

找到答案,数据表中存在错误数据。