Сколько лет учиться на программиста?
Вот что-то за 5 часов накалякал, проблема только с кортежем, в методе swap_column, т.к. у меня net 3.5:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1 {
public class TSubItem {
public String Text { get; set; }
public int row_id { get; set; }
}
public class SubItem {
private List<TSubItem> Item = null;
public SubItem() {
Item = new List<TSubItem>();
}
public void add_subitem(String text, int row_id) {
Item.Add(new TSubItem() { Text = text, row_id = row_id });
}
public List<TSubItem> get_subitems() {
return Item;
}
}
public class Item {
public int column_id { get; set; }
public int row_id { get; set; }
public String Text { get; set; }
public SubItem subitem { get; set; }
}
public class Header {
public int column_id { get; set; }
public String Text { get; set; }
public int x { get; set; }
}
class Grid {
private List<Item> items;
private List<Header> headers;
private int y = 0;
public Grid() {
items = new List<Item>();
headers = new List<Header>();
y = 1;
}
public void add_header(String text, int x, int column_id) {
headers.Add(new Header() { Text = text, x = x, column_id = column_id });
}
public void add_item(String item, int column_id, int row_id) {
this.add_item(item, column_id, row_id, null);
}
public void add_item(String item, int column_id, int row_id, SubItem si) {
if(si != null)
items.Add(new Item() { Text = item, subitem = si, column_id = column_id, row_id = row_id });
else
items.Add(new Item() { Text = item, column_id = column_id, row_id = row_id});
}
public void swap_column(int column_id, int to_column_id) {
//https://entityframework.net/ru/knowledge-base/33545249/
//https://stackoverrun.com/ru/q/10321290
}
public void render() {
if (headers.Count <= 0 || items.Count <= 0) return;
foreach (var h in headers) {
Console.SetCursorPosition(h.x, 1);
Console.WriteLine(h.Text);
y++;
}
var r = from head in headers join item in items on head.column_id equals item.column_id select new { subitem = item.subitem, x = head.x, y = item.row_id, Text = item.Text };
foreach (var item in r) {
Console.SetCursorPosition(item.x, item.y);
Console.WriteLine(item.Text);
if (item.subitem != null) {
foreach (var subitem in item.subitem.get_subitems()) {
Console.SetCursorPosition(item.x, subitem.row_id);
Console.Write(" " + subitem.Text);
}
}
}
}
}
class Program {
static void Main(string[] args) {
SubItem si = new SubItem();
si.add_subitem("xx", 3);
si.add_subitem("yy", 4);
Grid g = new Grid();
g.add_header("Firstname", 1, 1);
g.add_header("Lastname", 30, 2);
g.add_header("Birhday", 30, 3);
g.add_item("AA", 1, 2, si);
g.add_item("BB", 2, 2);
g.add_item("CC", 1, 5);
g.render();
for(int j = 0; j < 5; j++) Console.WriteLine("");
Console.ReadKey();
Console.Clear();
g.swap_column(2, 1);
g.render();
for (int j = 0; j < 5; j++) Console.WriteLine("");
}
}
}