Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.80
Temoxa
10 / 10 / 3
Регистрация: 19.03.2010
Сообщений: 679
Записей в блоге: 2
Завершенные тесты: 1
#1

Сформировать дерево TreeView по данным из БД - C# WPF

28.05.2012, 05:40. Просмотров 2094. Ответов 2
Метки нет (Все метки)

Привет ребята! Вот смотрите, есть стандартная таблица дерева)

TreeID,
LevelID,
ParentID,
Name
Например, данные такие

1 1 NULL Телевизоры
2 2 1 Samsung
3 2 1 Sony

И как теперь заполнить TreeView из такой таблицы?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2012, 05:40
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Сформировать дерево TreeView по данным из БД (C# WPF):

Дерево TreeView
Мне необходимо, что бы в дереве был определённая иконка и я реализовал это не...

Дерево treeview, запутался окончательно...
1. Ну так вот мне нужно что бы при нажатии правой клавишей по Nodes выводилась...

TreeView - дерево с разными типами
Привет форумчане! Прошу помощи в работе с компонентом TreeView в WPF. Задача...

Заполнить из базы данных дерево значений (TreeView)
Доброго дня, хочу заполнить из базы данных дерево значений (структура дерева...

Сформировать XML-документ по данным TreeView
Доброго времени суток, у меня такой вопрос, я читаю и вывожу свой XML...

Сформировать дерево TreeView данными из таблицы
Люди помогите очень нужно Есть таблица в БД следующего вида: id организация...

2
MATiAiX
3 / 3 / 1
Регистрация: 31.05.2012
Сообщений: 20
07.06.2012, 12:23 #2
Мне думается тут твою таблицу нужно разделить на таблицу например "номенклатура" и "ТВ". А по заполнению посмотреть в сторону datatemplate.
0
Unril
786 / 677 / 109
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
10.06.2012, 00:15 #3
Лучший ответ Сообщение было отмечено Temoxa как решение

Решение

На основе исходных данных формируешь древовидную структуру из класса Node, имеющего поля Name и список с потомками. Создаешь HierarchicalDataTemplate с необходимыми параметрами отображения. После этого создаёшь элемент TreeView и привязываешь корень дерева к его свойстве ItemsSource. Готово.

Добавлено через 1 час 26 минут
Пример:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
namespace WpfApplicationTest {
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows;
 
    public partial class MainWindow : Window {
        public MainWindow() {
            InitializeComponent();
 
            var records = new List<Record>
                {
                    new Record
                        {
                            Name = "Телевизоры",
                            TreeId = 1,
                            ParentId = 0
                        },
                    new Record
                        {
                            Name = "Samsung",
                            TreeId = 2,
                            ParentId = 1
                        },
                    new Record
                        {
                            Name = "Sony",
                            TreeId = 3,
                            ParentId = 1
                        },
                    new Record
                        {
                            Name = "Sony1",
                            TreeId = 4,
                            ParentId = 3
                        },
                    new Record
                        {
                            Name = "Sony2",
                            TreeId = 5,
                            ParentId = 3
                        },
                    new Record
                        {
                            Name = "Samsung1",
                            TreeId = 6,
                            ParentId = 2
                        }
                };
 
            var root = CreateTree(records);
 
            tree.ItemsSource = new[] { root };
        }
 
        private static Node CreateTree(List<Record> records) {
            Record rootRecord = records.First(r => r.ParentId == 0);
            var root = new Node(rootRecord.Name, rootRecord.TreeId);
            foreach (Record record in records.Where(r => r.ParentId != 0)) {
                root.Add(record);
            }
            return root;
        }
    }
 
    public class Record {
        public int TreeId { get; set; }
 
        public int ParentId { get; set; }
 
        public string Name { get; set; }
    }
 
    public class Node {
        public Node(string name, int id) {
            Id = id;
            Name = name;
            Children = new List<Node>();
        }
 
        public string Name { get; set; }
 
        public List<Node> Children { get; set; }
 
        public int Id { get; set; }
 
        public override string ToString() {
            return string.Format("Name: {0}", Name);
        }
 
        public void Add(Record record) {
            Traverse().First(node => node.Id == record.ParentId).Children.Add(new Node(record.Name, record.TreeId));
        }
 
        private IEnumerable<Node> Traverse() {
            yield return this;
            foreach (Node child in Children.SelectMany(node => node.Traverse())) {
                yield return child;
            }
        }
    }
}
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<Window x:Class="WpfApplicationTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Height="350" Width="525" Background="#FFF8F8F8"
        Title="MainWindow" xmlns:src="clr-namespace:WpfApplicationTest">
  <Grid>
    <TreeView x:Name="tree">
      <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type src:Node}" ItemsSource="{Binding Path=Children}">
          <TextBlock Text="{Binding Path=Name}" />
        </HierarchicalDataTemplate>
      </TreeView.Resources>
    </TreeView>
  </Grid>
</Window>
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2012, 00:15
Привет! Вот еще темы с решениями:

Сформировать дерево Т и определить число вхождений параметра Е в дерево Т - Блок схема
Сформировать дерево Т и определить число вхождений параметра Е в дерево Т. Вот...

Не верно отображается TreeView, сформированный по данным из БД
Здраствуйте, подскажите пожайлуста. есть база Acess состоящая всего из двух...

Как построить treeview по данным из таблицы
Доброе утро! Подскажите, пожалуйста, как можно построить treeview вот при...

Построить treeView согласно данным из XML
Всем привет. Мучаюсь с этим вопросом уже два дня. Мне уже помогали - но код был...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru