internal string CreateCrossReferenceReport(EventDB eventDB)
{
InitReport();
// Header.
WriteH1(string.Format(ReportText.CrossRef_Title, QueryEvent.GetEventTitle(eventDB, " ")));
Id<ControlPoint>[] controlsToXref = GetControlIdsToXref(eventDB);
Id<Course>[] coursesToXref = QueryEvent.SortedCourseIds(eventDB);
string[,] xref = CreateXref(eventDB, controlsToXref, coursesToXref);
string[] classes = new string[coursesToXref.Length + 1];
classes[0] = "leftalign";
for (int i = 1; i < classes.Length; ++i)
classes[i] = "rightalign";
BeginTable("", classes.Length, classes);
// Write the header row.
BeginTableRow();
WriteTableHeaderCell(ReportText.ColumnHeader_Control);
for (int i = 0; i < coursesToXref.Length; ++i)
WriteTableHeaderCell(eventDB.GetCourse(coursesToXref[i]).name);
EndTableRow();
// Write the cross-reference rows. Table rule after every 3rd line
for (int row = 0; row < controlsToXref.Length; ++row) {
bool tablerule = (row % 3 == 2);
BeginTableRow();
WriteTableCell(tablerule ? "tablerule" : "", eventDB.GetControl(controlsToXref[row]).code);
for (int col = 0; col < coursesToXref.Length; ++col)
WriteTableCell(tablerule ? "tablerule" : "", xref[row, col]);
EndTableRow();
}
EndTable();
return FinishReport();
}