Здравствуйте! Пишу проект на ASP.NET MVC5.
Есть коллекция объектов, к примеру:
public class ProductState
{
public int Name { get; set; }
public int State { get; set; }
public int Quantity { get; set; }
}
И я хочу вывести таблицу типа:
| Name | Name | Name
---------------------------------------
State | Quantity | Quantity | Quantity
---------------------------------------
State | Quantity | Quantity | Quantity
---------------------------------------
State | Quantity | Quantity | Quantity
---------------------------------------
Буду очень рад, если кто-нибудь подскажет, как это сделать.
Решение в лоб:
class Program
{
public class ProductState
{
public int Name { get; set; }
public int State { get; set; }
public int Quantity { get; set; }
}
static void Main(string[] args)
{
var dataList = GetDataList();
//Получаем все имена и статусы
var names = dataList.Select(x => x.Name).Distinct().ToList();
var states = dataList.Select(x => x.State).Distinct().ToList();
//Далее генерирую HTML таблицу
var stringBuilder = new StringBuilder();
stringBuilder.AppendLine("<table bordercolor=\"black\" border=\"1\">");
//Так как таблица формируется построчно, то первым делом выведем все имена (Причем первую добавляем пустой)
stringBuilder.AppendLine("<tr>");
AddCell(stringBuilder, string.Empty);
foreach (var name in names)
{
AddCell(stringBuilder, name.ToString());
}
stringBuilder.AppendLine("</tr>");
//После чего формируем каждую строку со значениями
foreach (var state in states)
{
stringBuilder.AppendLine("<tr>");
AddCell(stringBuilder, state.ToString());
foreach (var name in names)
{
var item = dataList.First(x => x.State == state && x.Name == name);
AddCell(stringBuilder, item.Quantity.ToString());
}
stringBuilder.AppendLine("</tr>");
}
stringBuilder.AppendLine("</table>");
//Сохраняем и открываем документ
File.WriteAllText("index.html", stringBuilder.ToString());
Process.Start("index.html");
}
/// <summary>
/// Добавление ячейки
/// </summary>
private static void AddCell(StringBuilder stringBuilder, string data)
{
stringBuilder.AppendLine($"<td width=\"100px\">{data}</td>");
}
/// <summary>
/// Получение списка с данными
/// </summary>
private static List<ProductState> GetDataList()
{
return new List<ProductState>()
{
new ProductState(){Name = 1, State = 10, Quantity = 1},
new ProductState(){Name = 1, State = 20, Quantity = 2},
new ProductState(){Name = 1, State = 30, Quantity = 3},
new ProductState(){Name = 2, State = 10, Quantity = 4},
new ProductState(){Name = 2, State = 20, Quantity = 5},
new ProductState(){Name = 2, State = 30, Quantity = 6},
new ProductState(){Name = 3, State = 10, Quantity = 7},
new ProductState(){Name = 3, State = 20, Quantity = 8},
new ProductState(){Name = 3, State = 30, Quantity = 9},
};
}
}
P.S. Стринг билдер можно убрать, тут главное понять что таблица формируется построчно. Потому мы сначала достаем все уникальные значения имен и статусов. После чего проходим по всем статусом (Так как они являются строками). После чего проходим по всем уникальным именам и ищем соответствующее значение в общих данных, после чего соответственно их выводим.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Я ученикCтолкнулся с неадекватным поведением в адаптивного элемента (в Хроме в режиме имитации смартфона)
Имеется выпадающее меню, при ховере на вложенный пункт меню, если этих пунктов много и они выходят вниз за экран, должна появиться вертикальная...
Имеется HTML и CSS файл, в котором много неиспользуемых стилей CSS которые хотелось бы удалить в автоматическом режиме и оставить только те стили,...