2013-03-26 5 views
0

Мне нужна помощь в заполнении древовидной структуры из базы данных sql, простое право, просто посмотрите на тысячи примеров и адаптируйте их. Проблема в том, что я пробовал около недели использовать много разных образцов, и я все еще нигде. Я не программист, поэтому трудно понять некоторые основы, которые все воспринимают как должное. Я разработал веб-приложение asp.net, которое отслеживает проекты и их предельные сроки для управления, чтобы проверить, приложение завершено и работает, но теперь вы хотите перейти в Silverlight и получить запрос от участника-экстрасенса, чтобы отобразить всю структуру как TreeView (конечно, не проблема, просто, как пирог)Silverlight - иерархическое древовидное представление из базы данных sql vb.net

Здесь пока сценарий:

Все Отделы

Coffee Exco 
     Project 1 
      Action 1 
      Action 2 
     Project 2 
      Action 1 
    Credit Analytics 
     Project 3 
      Action 1 

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

Выборочные данные в базе:

Tab1ID|Department|Project|Deadline|Owner|Completed 
1 Coffee Exco  Project  3/31/2013Public   0 
2 Credit AnalyticsProject  4/20/2013Public   0 
3 Coffee Exco  Project  5/1/2013Public   0 

Tab2ID|Project|Action|ActionDeadline|Progress 
1Project 1  Action 1     10 
2Project 1  Action 2     0 
3Project 2  Action 1     0 

Как я уже сказал, я попытался так много различных образцов теперь я понятия не имею, что делать, если кто-то мог ходить старую собаку через процесс шаг за шагом и предположим, что он не самый яркий, я буду вечно благодарен. Я не против делать это ни с помощью XAML, ни с кода. Я был бы признателен за конец, если это вообще возможно.

С наилучшими пожеланиями, Жак

ответ

0

Да я помню, борющиеся с TreeView для возрастов, чтобы заставить его работать.

Трюк, который я нашел, получал вашу голову вокруг шаблона предмета. Вот пример я использую:

<controls:TreeView Name="TreeViewCategories" 
         Height="372" HorizontalAlignment="Left" Margin="12,12,0,0" VerticalAlignment="Top" Width="419"> 
     <controls:TreeView.ItemTemplate> 
      <common:HierarchicalDataTemplate ItemsSource="{Binding ChildCategories}" > 
       <TextBlock Text="{Binding Name, Mode=TwoWay}" Name="TxtCategoryName" /> 
      </common:HierarchicalDataTemplate> 
     </controls:TreeView.ItemTemplate> 
    </controls:TreeView> 

Выше на дереве категорий (так у вас есть категории, в в том, что подкатегорий, в затем суб-суб-категории, и на нем идет). Обратите внимание, что это один и тот же класс на каждом уровне, т. Е. Верхний уровень имеет тип «Категория», их подкатегории также относятся к типу «Категория», и на нем идет. Я вернусь к этому вопросу позже.

Итак, у нас есть внешний контроль над деревом. Тогда внутри у нас есть шаблон элемента. Элемент ItemsSource - это замечание. Это указывает на привязку, где искать дочерние объекты. Для меня в каждой категории содержится коллекция «ChildCategories».

Наконец-то внутри, что у меня есть, как бы мне хотелось, чтобы элементы отображались, это в текстовом блоке для меня.

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

Я использовал только древовидные структуры, где каждый элемент одного класса. Это довольно простая реализация, так как в приведенном выше примере ItemTemplate является одинаковым на всех уровнях - он всегда ищет «ChildCategories» в пределах рассматриваемых категорий, независимо от того, является ли это верхним уровнем, 2-м уровнем или любым другим уровнем.

В вашем случае это будет иначе - ваш верхний уровень будет искать проекты. Но каждый проект будет искать действия внутри.

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

У вас будут отделы, которые ищут проекты внутри. И проекты будут искать действия внутри них.

Древовидная структура настроена так, чтобы всегда иметь один и тот же класс на каждом уровне - каждый уровень использует тот же ItemTemplate, и поэтому ищет одну и ту же коллекцию детей (в моем случае он всегда ищет «ChildCategories» внутри того, что мы смотрим в).

Идеи для Вас:

  1. Помещенный некоторые формы класса обертки вокруг ваших деталей, так что это всегда то же самое.

  2. Попробуйте использовать только текущие классы, но добавьте клиентскую часть свойств, чтобы все они имели, например, коллекцию под названием «Дети» и строку под названием «DisplayNameForTreeView».

Я надеюсь, что это поможет решить вашу проблему, конечно же, это была концепция, которая удерживала меня на некоторое время.

Вы можете попробовать чтение этих: How can I have multiple types of children in a single Silverlight TreeView node? http://social.msdn.microsoft.com/Forums/en-US/silverlightcontrols/thread/5d648c2f-f636-4093-9616-883fe43d5524/

Смежные вопросы