Задать вопрос

Можно ли преобразовать такой класс в TreeView?

Существует класс следующего вида:
public class Block
{
        public string title; // название класса
        public Dictionary<string, object> property; // свойства, object может быть string или List<string>
        public Block parent; // ссылка на блок родителя
}

По сути это отображение формата JSON, например такой вот JSON :
{
  "query_block": {
    "select_id": 1,
    "table": {
      "table_name": "firmsmaterials",
      "access_type": "ALL",
      "rows": 11,
      "filtered": 100
    }
  }
}

будет вот таким набором объектов класса Block
1: Block 1
title = query_block
poperties = "select_id : 1"
parent = null
2: Block 2
title = table
properties =...
parent = Block 1
итд...
Вообщем где в JSON встречается "{" создаётся новый блок с ссылкой на родителя (изначально это было задумано для рисования блок схем JSON-а). Так или иначе на выходе я получаю List.
Я захотел преобразовать этот List в TreeView, примерно такого вида:
query_block >
...select_id : 1
...table>
......"table_name": "firmsmaterials",
......"access_type": "ALL",
......"rows": 11,
......"filtered": 100
И так до бесконечности. Я попробовал написать код, который бы преобразовывал List в TreeView, но он совершенно не работает так как я хочу. Честно говоря уже не знаю что сделать:
StringBuilder arrProperties;
            TreeViewItem tvItem, ptvItem = new TreeViewItem { Header = "root"};
            foreach (Block b in blocks)
            {
                
                tvItem = new TreeViewItem { Header = b.title };
                
                foreach(KeyValuePair<string, object> i in b.property)
                {
                    if (i.Value is string || i.Value is int)
                    {
                        tvItem.Items.Add(new TreeViewItem { Header = i.Key + " : " + i.Value });
                    }
                    else if (i.Value is List<string>)
                    {
                        arrProperties = new StringBuilder();
                        arrProperties.Append(" [ ");
                        foreach (string item in (List<string>)i.Value)
                        {
                            arrProperties.Append(item + ", ");
                        }
                        arrProperties.Remove(arrProperties.Length - 2, 2);
                        arrProperties.Append(" ]");
                        tvItem.Items.Add(new TreeViewItem { Header = i.Key + " : " + arrProperties.ToString() });
                    }
                }
                ptvItem.Items.Add(tvItem);
                ptvItem = tvItem;
                
            }
            trvQueryPlan.Items.Add(ptvItem);
  • Вопрос задан
  • 2450 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы