C# 隐藏已显示在父子层次结构中的TreeView项
我试图在TreeView中显示具有自父关系的DataTable的内容。问题在于存在具有祖先的DataTable记录的重复:它们显示为父项和层次结构的成员: 我只想显示一次项:在层次结构中 窗口xaml:C# 隐藏已显示在父子层次结构中的TreeView项,c#,.net,wpf,C#,.net,Wpf,我试图在TreeView中显示具有自父关系的DataTable的内容。问题在于存在具有祖先的DataTable记录的重复:它们显示为父项和层次结构的成员: 我只想显示一次项:在层次结构中 窗口xaml: <Window x:Class="BindingTreeViewToDataSet.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://s
<Window x:Class="BindingTreeViewToDataSet.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:BindingTreeViewToDataSet"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ObjectDataProvider x:Key="DataSetProvider" MethodName="CreateDataSet" ObjectType="{x:Type local:DataSetCreator}" />
</Window.Resources>
<Grid>
<TreeView Grid.Row="0" DataContext="{StaticResource DataSetProvider}" ItemsSource="{Binding Data}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Parent2Child}" >
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
</Window>
我已经改变了方法,并像这里描述的那样过滤数据源
谢谢你,@Sheridan:你采取了错误的方法来解决你的问题。您的实际问题是集合中存在重复的数据元素。与其不解决问题而只是隐藏无效元素,不如修复数据并删除重复的元素?你能解释一下吗?在本例中,DataTable中只有3条记录,但TreeView中有6个节点。我不明白如何修复数据。如果不希望重复项出现在树视图中,请不要将它们添加到数据绑定数据源集合中。
public static class DataSetCreator
{
public static DataSet CreateDataSet()
{
var ds = new DataSet();
var tbl = new DataTable("Data");
tbl.Columns.Add("ID", typeof(int));
tbl.Columns.Add("ParentID", typeof(int));
tbl.Columns.Add("Name");
ds.Tables.Add(tbl);
ds.Relations.Add("Parent2Child", tbl.Columns["ID"], tbl.Columns["ParentID"]);
tbl.Rows.Add(new object[] { 0, DBNull.Value, "Parent#1" });
tbl.Rows.Add(new object[] { 1, 0, "Child#2" });
tbl.Rows.Add(new object[] { 2, 1, "Subchild#3" });
return ds;
}
}