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";
}
}
如果if
语句的条件包含触发异常的指令,则它可以"中断循环"。
如果dtRow
在索引18处没有元素,那么您的if (dtRow[18] == uniqueName.SortName)
很可能会生成"索引越界"异常。在引用索引之前,应该添加一个检查以查看索引是否有效,以避免引发异常。
找到答案,数据表中存在错误数据。