如果我在SQL查询中有一个DataSet,我可以将它直接绑定到TreeView并显示我的数据层次结构吗?我知道我必须使用几个HierarchicalDataTemplates,但我不知道如何告诉每个人要显示什么数据。
如果我有一个4级层次结构,如下所示:
<HierarchicalDataTemplate x:Key="FirstLevelTemplate" ItemTemplate="{StaticResource SecondLevelTemplate}"/>
<HierarchicalDataTemplate x:Key="SecondLevelTemplate" ItemTemplate="{StaticResource ThirdLevelTemplate}"/>
<HierarchicalDataTemplate x:Key="ThirdLevelTemplate" ItemTemplate="{StaticResource FourthLevelTemplate}"/>
<DataTemplate x:Key="FourthLevelTemplate"/>
需要设置哪些属性才能直接从DataSet显示我的数据?
编辑:理想情况下,我想使用单个自引用DataTable来完成此操作。
答案 0 :(得分:1)
这个网站有一些很好的使用treeview的例子。
答案 1 :(得分:1)
我认为你不能那样做。
Treeview控件和HierarchicalDataTemplate期望对象的层次结构。 DataSet本质上是平的。
您必须以某种方式将该数据集转换为对象层次结构,每个对象都有自己的“Children”集合。树视图的ItemsSource将绑定到“顶级集合”(没有父引用的行)。
每个HierarchicalDataTemplate都将其ItemsSource属性绑定到相应的Children属性。
可能有一个使用转换器的解决方案,但如果它存在,它可能最终会比在绑定之前直接重新整形数据更复杂。
答案 2 :(得分:0)
首先,您可以将TreeView的ItemsSource设置为DataSet。
接下来,您将TreeView的ItemTemplate设置为FirstLevelTemplate。
ItemTemplate="{StaticResource FirstLevelTemplate}"
第一个模板必须引用将使用第二级模板的项目。将项目源添加到此分层模板,如下所示:
<HierarchicalDataTemplate x:Key="FirstLevelTemplate" ItemsSource="{Binding ChildItems}" ItemTemplate="{StaticResource SecondLevelTemplate}"/>
更改“ChildItems”以引用DataSet中包含子项的属性。对每个HierarchicalDataTemplate重复此操作。
最后,您需要向DataTemplates添加控件才能显示数据。这是一个简单的例子:
<DataTemplate x:Key="FourthLevelTemplate"/>
<Border BorderThickness="1" BorderBrush="Gray" CornerRadius="3">
<TextBlock Text="{Binding DataProperty}"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</DataTemplate>
在这种情况下,您将使用数据字段的属性名称替换“DataProperty”。请注意,您可以添加其他控件(如TextBox,ComboBox等)以显示其他数据。