powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Treeview с привязкой данных из одной таблицы
5 сообщений из 5, страница 1 из 1
Treeview с привязкой данных из одной таблицы
    #38116000
LastDino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Начинаю осваивать WPF, помогите пожалуйста. Имеется таблица в локальной БД:
CategoryIDCategoryNameParentID1Деньгиnull2Рубль null 3Долар24Фирмыnull 5Aplle26iphone57ipad58ipod7

Заполняю её с помощью DataSet:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
using System.Data;
using System.Windows;
using WpfApplication1.db2DataSetTableAdapters;

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            db2DataSet ds = new db2DataSet();
            TreeTableAdapter tree = new TreeTableAdapter();
            tree.Fill(ds.Tree);
            DataRelation rel = new DataRelation("parent_child",
                ds.Tables["Tree"].Columns["CategoryID"],
                ds.Tables["Tree"].Columns["ParentID"]);
                ds.Relations.Add(rel);
            treeView.ItemsSource = ds.Tables["Tree"].DefaultView;
        }
    }
}



Само дерево:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<Window.Resources>
        <HierarchicalDataTemplate
            x:Key="DetailTemplate"
            ItemsSource="{Binding Path=parent_child}">
            <TextBlock Text="{Binding CategoryName}"/>
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate
            x:Key="MasterTemplate"
            ItemsSource="{Binding Path=parent_child}"
            ItemTemplate="{StaticResource DetailTemplate}">
            <TextBlock Text="{Binding CategoryName}"/>
        </HierarchicalDataTemplate>
    </Window.Resources>
    <Grid>
        <TreeView Name="treeView" 
                  ItemsSource="{Binding Tree}" 
                  ItemTemplate="{StaticResource MasterTemplate}">
        </TreeView>
    </Grid>



В результате все подразделы дерева отображаются в корне дерева и дублируются. Как правильно построить его?
С похожим примером http://www.sql.ru/forum/actualthread.aspx?tid=947906 разобраться не смог(
...
Рейтинг: 0 / 0
Treeview с привязкой данных из одной таблицы
    #38120575
LastDino
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
никто не знает что ли?(
...
Рейтинг: 0 / 0
Treeview с привязкой данных из одной таблицы
    #38133897
Miad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LastDino,
Я тоже так и не смог прикрутить структуру произвольного уровня вложенности через использование иерархических шаблонов. Говорят там правильно нужно ключи указать, но у меня не получилось. Если получиться, то поделитесь плиз примером.

Я в итоге заполнял руками из кода, делая рекурсивный метод, где заполнял

Код: c#
1.
2.
3.
4.
5.
6.
                TreeViewItem treeViewItem = new TreeViewItem();
                treeViewItem.Header = template_item.name;
                treeViewItem.HeaderTemplate = headerTemplate;
                treeViewItem.Tag = template_item;
...
                treeViewItemParent.Items.Add(treeViewItem);
...
Рейтинг: 0 / 0
Treeview с привязкой данных из одной таблицы
    #38135822
unknownfromrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Miad,
Думаю я смогу помочь - но для начала дай мне коллекцию - которую ты хочешь прикрутить в Тривью.
То есть скинь консолку с коллекцией (наполниее данными). То есть - если у тебя вложенные данные - укажи в примере.
Но только хотелось бы оперативно получить пример от тебя. Если оперативно не получится - тогда не факт что смогу ответить
...
Рейтинг: 0 / 0
Treeview с привязкой данных из одной таблицы
    #38136075
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
    public MainWindow()
    {
      InitializeComponent();
      using (var cnn = new SqlConnection("Data Source=......"))
      {
        cnn.Open();
        using(var cmd = new SqlCommand(@"
          select CategoryId, CategoryName, ParentId from (
            values
              (1,N'Деньги',null),
              (2,N'Рубль',1),
              (3,N'Долар',1),
              (4,N'Фирмы',null),
              (5,N'Aplle',4),
              (6,N'iphone',5),
              (7,N'ipad',5)
          ) t(CategoryId, CategoryName, ParentId)", cnn))
        using(var rd = cmd.ExecuteReader())
        {
          var dt = new DataTable();
          dt.Load(rd);
          var ds = new DataSet();
          ds.Tables.Add(dt);
          ds.Relations.Add("CategoryParentRelation", dt.Columns["CategoryId"], dt.Columns["ParentId"]);
          DataSource = dt.DefaultView;
          DataSource.RowFilter = "ParentId is null";
        }
      }
      DataContext = this;
    }

    public DataView DataSource { get; private set; }
  }


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<TreeView
  ItemsSource="{Binding DataSource}">
  <TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding CategoryParentRelation}">
      <TextBlock Text="{Binding CategoryName}"/>
    </HierarchicalDataTemplate>
  </TreeView.ItemTemplate>
</TreeView>
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Treeview с привязкой данных из одной таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]