powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Корректное отображение TreeView
18 сообщений из 18, страница 1 из 1
Корректное отображение TreeView
    #37524940
new_silverlither
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Задача: с помощью рекурсивного WCF-сервиса (дергает SP. Процедура отрабатывает корректно) построить дерево "ОКАТО".
WCF-сервис принимает в качестве параметра одну переменную <код>, и возвращает строки (List<>) , содержащие
<код>, <наименование>, <имеются ли дочерние записи>.
Делаю так:
Класс:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#region OKATO
        ObservableCollection<OKATODataItem> refOKATOTree;
        public class OKATODataItem
        {
            public string Name { get; set; }
            public string NCode { get; set; }
            public int? HasChild { get; set; }
            public ObservableCollection<OKATODataItem> Child = new ObservableCollection<OKATODataItem>();            
        }
        #endregion

Метод при раскрытии узла:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
private void rtvOKATO_LoadOnDemand(object sender, Telerik.Windows.RadRoutedEventArgs e)
        {
            RadTreeViewItem item = (e.OriginalSource as RadTreeViewItem);
            if (item != null)
            {
                OKATODataItem v_OKATO = item.Item as OKATODataItem;
                if (v_OKATO != null)
                {
                    st.GetChildOKATOAsync(v_OKATO.NCode);
                }
                else
                {
                    item.IsLoadOnDemandEnabled = false;
                }
            }
        }

Код XAML:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 <UserControl.Resources>
        <telerik:HierarchicalDataTemplate x:Key="ChildTemplate" 
                                          ItemsSource="{Binding Child}">
            <TextBlock Text="{Binding Path=Name}" />
        </telerik:HierarchicalDataTemplate>
        <telerik:HierarchicalDataTemplate x:Key="RootTemplate" 
                                          ItemTemplate="{StaticResource ChildTemplate}" 
                                          ItemsSource="{Binding Path=Child}">
            <TextBlock Text="{Binding Name}" />
        </telerik:HierarchicalDataTemplate>
    </UserControl.Resources>

Код: plaintext
1.
2.
3.
4.
<telerik:RadTreeView IsEditable="False" IsSingleExpandPath="True" IsLoadOnDemandEnabled="True" IsExpandOnDblClickEnabled="True" Grid.Row="1"  
                             HorizontalAlignment="Stretch"  Name="rtvOKATO" ItemsIndent="20" VerticalAlignment="Stretch" 
                             LoadOnDemand="rtvOKATO_LoadOnDemand" ItemTemplate="{Binding Source={StaticResource RootTemplate}}" Margin="0,0,228,0">
        </telerik:RadTreeView>


В результате данные в дереве появляются, но при этом не формируются узлы, а данные просто добавляются в конец.
В данном примере используется библиотека Telerik, но и в обычной sdk все то же самое.
Подозреваю, что где-то в HierarchicalDataTemplate я накосячил...
Но где именно - разобраться не могу. В чем я не прав?
...
Рейтинг: 0 / 0
Корректное отображение TreeView
    #37524978
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты не прав, в том, что сформировал не очень качественный вопрос.
...
Рейтинг: 0 / 0
Корректное отображение TreeView
    #37524989
new_silverlither
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexeiKты не прав, в том, что сформировал не очень качественный вопрос.

А что не так с вопросом? Вроде все понятно в вопросе...
...
Рейтинг: 0 / 0
Корректное отображение TreeView
    #37525034
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
new_silverlither,

да, все понятно, но только тебе :)
...
Рейтинг: 0 / 0
Корректное отображение TreeView
    #37525075
new_silverlither
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexeiKnew_silverlither,

да, все понятно, но только тебе :)

Уточню получаемый результат. Может прояснится немного..:))

Результат, получаемый при выборе субъекта, нормальный.
А вот когда пытаемся раскрыть любой узел, получается не так, как должно было бы быть.
...
Рейтинг: 0 / 0
Корректное отображение TreeView
    #37525080
new_silverlither
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
new_silverlitherРезультат, получаемый при выборе субъекта, нормальный.
А вот когда пытаемся раскрыть любой узел, получается не так, как должно было бы быть.
Не могу картинку со скрином вставить. Размер - 14 килобайт.
...
Рейтинг: 0 / 0
Корректное отображение TreeView
    #37525090
new_silverlither
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попытаюсь объяснить словами.

TreeView при попытке раскрыть любой узел не раскрывает его, а добавляет вновь полученные данные, которые должны были бы составлять дочерний список, в конец списка, и делает их родительскими узлами.
Т.е. поведение как у обычного ListBox.

Все еще не понятно?
...
Рейтинг: 0 / 0
Корректное отображение TreeView
    #37525097
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага не понятно.
Код: plaintext
st.GetChildOKATOAsync(v_OKATO.NCode);
вот это не понятно.
...
Рейтинг: 0 / 0
Корректное отображение TreeView
    #37525122
new_silverlither
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexeiKага не понятно.
Код: plaintext
st.GetChildOKATOAsync(v_OKATO.NCode);
вот это не понятно.

Это вызов сервиса, который должен возвратить очередную порцию данных
Вот код завершения:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
void st_GetChildOKATOCompleted(object sender, SrTree.GetChildOKATOCompletedEventArgs e)
        {
            if (e.Error == null && e.Result != null)
            {
                foreach (SrTree.GetChildOKATO_Result item in e.Result)
                {
                    OKATODataItem t = new OKATODataItem();
                    t.Name = item.Name;
                    t.NCode = item.NCode;
                    t.HasChild = item.HasChild;
                    refOKATOTree.Add(t);
                }
            }            
        }

Дело в том, что данные возвращаются именно те, которые нужны, но дерево не строится.
Код при инициализации
Код: plaintext
1.
2.
3.
4.
5.
6.
public Home()
        {
            InitializeComponent();
            rtvOKATO.ItemsSource = this.refOKATOTree;
            refOKATOTree = new ObservableCollection<OKATODataItem>();            
        }
...
Рейтинг: 0 / 0
Корректное отображение TreeView
    #37525332
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а каким кодом, ты указываешь, что пришедших детей, нужно прикрепить к родителю?
у тебя там, такой код, что типа просто добавить в конец дерева.
нигде нету ссылки, что нужно добавить именно к родителю.
...
Рейтинг: 0 / 0
Корректное отображение TreeView
    #37525481
new_silverlither
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexeiKа каким кодом, ты указываешь, что пришедших детей, нужно прикрепить к родителю?
у тебя там, такой код, что типа просто добавить в конец дерева.
нигде нету ссылки, что нужно добавить именно к родителю.

Согласен. Исправил на
Код: plaintext
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.
void st_GetChildOKATOCompleted(object sender, SrTree.GetChildOKATOCompletedEventArgs e)
        {
            if (e.Error == null && e.Result != null)
            {
                foreach (SrTree.GetChildOKATO_Result item in e.Result)
                {
                    OKATODataItem t = new OKATODataItem();
                    t.Name = item.Name;
                    t.NCode = item.NCode;
                    t.HasChild = item.HasChild;
                    if (tokato != null)
                    {
                        var temp = refOKATOTree.FirstOrDefault<OKATODataItem>(p => p.NCode == tokato.NCode);
                        if (temp != default(OKATODataItem))
                            temp.Child.Add(t);
                        else refOKATOTree.Add(t);
                    }
                    else refOKATOTree.Add(t);
                }
            }            
        }

        private OKATODataItem tokato;

        private void rtvOKATO_LoadOnDemand(object sender, Telerik.Windows.RadRoutedEventArgs e)
        {
            RadTreeViewItem item = (e.OriginalSource as RadTreeViewItem);
            
            if (item != null)
            {
                tokato = (item.Item as OKATODataItem);
                OKATODataItem v_OKATO = item.Item as OKATODataItem;
                if (v_OKATO != null)
                {
                    st.GetChildOKATOAsync(v_OKATO.NCode);
                }
                else
                {
                    item.IsLoadOnDemandEnabled = false;
                }
            }
        }

Так же XAML подправил.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<telerik:RadTreeView IsEditable="False" IsSingleExpandPath="True" IsLoadOnDemandEnabled="True" IsExpandOnDblClickEnabled="True" Grid.Row="1"  
                             HorizontalAlignment="Stretch"  x:Name="rtvOKATO" ItemsIndent="20" VerticalAlignment="Stretch" 
                             LoadOnDemand="rtvOKATO_LoadOnDemand"  Margin="0,0,228,0">
            <telerik:RadTreeView.ItemTemplate>
                <telerik:HierarchicalDataTemplate ItemsSource="{Binding Child}" >
                    <TextBlock Text="{Binding Name}"/>
                </telerik:HierarchicalDataTemplate>
            </telerik:RadTreeView.ItemTemplate>
        </telerik:RadTreeView>

Теперь результат другой.
Узлы просто не раскрываются. Как будто бы в них нет данных.
Но данные ТОЧНО есть и они в класс заполняются как положено, к родителю, т.е. к текущему узлу.
...
Рейтинг: 0 / 0
Корректное отображение TreeView
    #37525507
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ошибки Binding студия какие показывает в immediate window или output?
...
Рейтинг: 0 / 0
Корректное отображение TreeView
    #37525537
new_silverlither
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexeiKа ошибки Binding студия какие показывает в immediate window или output?

Ошибок Binding нет.
Ошибок вообще никаких нет.
Даже предупреждений.
...
Рейтинг: 0 / 0
Корректное отображение TreeView
    #37525551
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а wpf или sl?
...
Рейтинг: 0 / 0
Корректное отображение TreeView
    #37525591
new_silverlither
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexeiKа wpf или sl?

Silverlight

Сейчас еще в режиме Debug с помощью Wath проверил свойство ItemsSource у TreeView.
Все заполняется корректно. Но не отображается.
...
Рейтинг: 0 / 0
Корректное отображение TreeView
    #37525736
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
new_silverlither,

ок ?
...
Рейтинг: 0 / 0
Корректное отображение TreeView
    #37525845
new_silverlither
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexeiKnew_silverlither,

ок ?

Да. Эта опция включена.
Все нормально. Ошибок нет.
...
Рейтинг: 0 / 0
Корректное отображение TreeView
    #37527492
new_silverlither
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все проблемы решены.
Все работает очень корректно и очень быстро.

AlexeiK, большое спасибо за участие и посильную помощь.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Корректное отображение TreeView
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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