[code=html
public string GetHTML()
{
string html, row1 = "", row2 = "";
html = "<table border=1 itemprop=\"graduatejob\"><thead>";
List<string> Years = new List<string> {};
List<string> Collumns = new List<string> {};
// Копируем столбец God1
foreach (graduateJob self in this.graduateJobBindingList)
{
Years.Add(self.God1);
}
// Сортируем по возрастанию
Years.Sort();
// Определяем максимальный год в исходном массиве данных
int lastYearValue = Convert.ToInt32(Years.Max());
// Формирем массив колонок, соответствующих году,
// отбирая уникальные позици, и фильтруя список по последним трем годам
Collumns.AddRange(Years.Distinct().Where(p => p.CompareTo(Convert.ToString(lastYearValue - 3)) == 1));
// Заполняем шапку таблицы
foreach (string columnYear in Collumns) {
row1 += "<td colspan=2>Год " + columnYear + "</td>";
row2 += "<td>Кол-во выпускников</td><td>Кол-во трудоустроенных выпускников</td>";
}
html += "<tr><td rowspan=2>Код</td><td rowspan=2>Направление подготовки (специальности)</td>" + row1 + "</tr><tr>" + row2 + "</tr></thead><tbody>";
// формируем новый список на основании имеющегося
IEnumerable<graduateJob> sortedRepo = this.graduateJobBindingList
.Where(z => z.God1.CompareTo(Convert.ToString(lastYearValue - 3)) == 1) // фильтруем по последним трем годам
.OrderBy(s => s.God1) // сортируем по году
.OrderBy(p => p.EduName); // затем по наименованию специиальности
int nextColumn = 0, delta, currentCollumn, i;
string previousName = sortedRepo.First().EduName;
html += "<tr><td>" + sortedRepo.First().EduCode + "</td><td>" + sortedRepo.First().EduName + "</td>";
// заливаем тело таблицы
foreach (graduateJob self in sortedRepo)
{
// Для новой специальности отбиваем новую строку
if (previousName != self.EduName) { // проеверяем не закончилась ли инфа по текущей специальности
html += "</tr><tr><td>" + self.EduCode + "</td><td>" + self.EduName + "</td>"; // если да, отбиваем новую строку и вносим инфу по следующей
nextColumn = 0; // переводим курсор колонки на первую позицию
}
previousName = self.EduName; // фиксируем текущую специальность
currentCollumn = Collumns.FindIndex(p => p == self.God1); // Ищем позицию колонки для текущей строки по году
delta = currentCollumn - nextColumn; // проверяем, соответствует ли год текущей строки году текущей колонки
nextColumn++; // смещаем курсор на следующую колонку
// Заполняем пустоты
for (i = 0; i < delta; i++)
{
html += "<td>-</td><td>-</td>";
}
html += "<td>" + self.KollTrudvipsk1 + "</td><td>" + self.Kollvipsk1 + "</td>"; // Забиваем данные на пересечении года и специальности
}
html = html.Substring(0, html.Length - 5); // отсекаем последний <tr>
html += "</tbody>";
html += "</table>";
return html;
}
php][/code]
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- <!DOCTYPE html>
- <?PHP /*подключаем xml файл*/
- ?>
- <html>
- <head>
- <meta charset="UTF-8">
- <title>Таблица(Шаблон представления информации о трудоустройстве выпускников образовательных организаций за последние 3 года)</title>
- <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">
- </head>
- <body>
- <div class="container-fluid">
- <h1>Таблица(Шаблон представления информации о трудоустройстве выпускников образовательных организаций за последние 3 года)</h1>
- <table itemprop="eduOP" class="table table-bordered table-hover table-striped">
- <thead>
- <tr>
- <td rowspan=2>Код</td>
- <td rowspan=2>Направление подготовки (специальности)</td>
- <?PHP
- $obj = $xml->graduateJobBindingList->graduateJob;
- echo "\t\t\t\t\t\t".'<td colspan=2> Год '.$obj->God.'</td>'.PHP_EOL;
- echo "\t\t\t\t\t\t".'<td colspan=2> Год '.$obj->God2.'</td>'.PHP_EOL;
- echo "\t\t\t\t\t\t".'<td colspan=2> Год '.$obj->God3.'</td>'.PHP_EOL;
- ?>
- </tr>
- <tr>
- <td>Кол-во выпускников</td>
- <td>Кол-во трудоустроенных выпускников</td>
- <td>Кол-во выпускников</td>
- <td>Кол-во трудоустроенных выпускников</td>
- <td>Кол-во выпускников</td>
- <td>Кол-во трудоустроенных выпускников</td>
- </tr>
- </thead>
- <tbody>
- <?PHP
- foreach($xml->graduateJobBindingList->graduateJob as $curNode)
- {
- echo "\t\t\t\t\t".'<tr>'.PHP_EOL;
- echo "\t\t\t\t\t\t".'<td itemprop="eduCode" class="text-center">'.$curNode->EduCode."</td>".PHP_EOL;
- echo "\t\t\t\t\t\t".'<td itemprop="eduName">'.$curNode->EduName.'</td>'.PHP_EOL;
- // echo "\t\t\t\t\t\t".'<td itemprop="god1">'.$curNode->God1.'</td>'.PHP_EOL;
- echo "\t\t\t\t\t\t".'<td itemprop="kollvipsk1">'.$curNode->Kollvipusknikov.'</td>'.PHP_EOL;
- echo "\t\t\t\t\t\t".'<td itemprop="kollTrudvipsk1">'.$curNode->Kolltrudoustroinihvipsknikov.'</td>'.PHP_EOL;
- //echo "\t\t\t\t\t\t".'<td itemprop="god2">'.$curNode->God2.'</td>'.PHP_EOL;
- echo "\t\t\t\t\t\t".'<td itemprop="kollvipsk2">'.$curNode->Kollvipusknikov2.'</td>'.PHP_EOL;
- echo "\t\t\t\t\t\t".'<td itemprop="kollTrudvipsk2">'.$curNode->Kolltrudoustroinihvipsknikov2.'</td>'.PHP_EOL;
- // echo "\t\t\t\t\t\t".'<td itemprop="god1">'.$curNode->God3.'</td>'.PHP_EOL;
- echo "\t\t\t\t\t\t".'<td itemprop="kollvipsk1">'.$curNode->Kollvipusknikov3.'</td>'.PHP_EOL;
- echo "\t\t\t\t\t\t".'<td itemprop="kollTrudvipsk1">'.$curNode->Kolltrudoustroinihvipsknikov.'</td>'.PHP_EOL;
- echo "\t\t\t\t\t".'</tr>'.PHP_EOL;
- }
- ?>
- </tbody>
- </table>
- </div>
- </body>
- </html>