0

我需要一些帮助来从 sql 数据库填充树视图,很简单,只需查看数千个示例并进行调整即可。问题是我已经尝试了大约一个星期来使用许多不同的样本,但我仍然无处可去。我不是程序员,所以很难理解每个人都认为理所当然的一些基础知识。我开发了一个 asp.net 网络应用程序,它可以跟踪项目及其管理人员审查的截止日期,该应用程序已完成且正在运行,但现在想移至 Silverlight 并收到执行委员的请求,将整个结构显示为树视图(当然,没问题,很容易)

这是场景:

所有部门

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

目前我有 2 个表来存储树视图所需的数据。我可以毫无问题地获取数据,它试图将其放入我似乎无法正确处理的分层树视图中。

数据库中的样本数据:

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 或代码隐藏来实现。如果可能的话,我会很感激一个端到端的例子。

亲切的问候,雅克

4

1 回答 1

0

是的,我记得多年来一直在树视图上苦苦挣扎以使其正常工作。

我发现的诀窍是让您了解项目模板。这是我使用的一个例子:

    <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”,无论它是顶级、第二级还是任何其他级别。

在您的情况下,情况会有所不同-您的最高级别将寻找项目。但是每个项目都会在内部寻找行动。

还回到顶部的表格结构 - 您在第一个表格中有部门,也许有一个单独的部门表会更清教徒。

您将拥有部门,在其中寻找项目。项目会在其中寻找行动。

树视图设置为在每个级别始终具有相同的类 - 每个级别使用相同的 ItemTemplate,因此查找相同的子集合(在我的情况下,它总是在我们正在查看的任何内容中查找“ChildCategories”)。

给你的想法:

  1. 在你的项目周围放置某种形式的包装类,所以它总是一样的。

  2. 尝试仅使用您当前的类,但在客户端添加属性,以便它们都有,例如,一个名为“Children”的集合和一个名为“DisplayNameForTreeView”的字符串。

我希望这可以帮助您解决您的特定问题,当然正是这个概念让我坚持了一段时间。

您可以尝试阅读以下内容: 如何在单个 Silverlight TreeView 节点中拥有多种类型的子节点? http://social.msdn.microsoft.com/Forums/en-US/silverlightcontrols/thread/5d648c2f-f636-4093-9616-883fe43d5524/

于 2013-03-27T15:57:31.100 回答