Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 隐藏已显示在父子层次结构中的TreeView项_C#_.net_Wpf - Fatal编程技术网

C# 隐藏已显示在父子层次结构中的TreeView项

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

我试图在TreeView中显示具有自父关系的DataTable的内容。问题在于存在具有祖先的DataTable记录的重复:它们显示为父项和层次结构的成员:

我只想显示一次项:在层次结构中

窗口xaml:

<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;
    }
}