使用实体框架进行Treeview控制

时间:2012-11-13 12:17:02

标签: c# entity-framework-4 treeview

我对C#/ Entity Framework相对较新,我正在尝试使用Treeview控件/ HierachicalDataTemplate与Entity Framework 4.0一起工作,并且遗漏了一些内容。

我有一个自引用表:

  

divid(PK,int,not null); divname(nchar(100),not null);   divshortname(nchar(50),not null); parentid(FK,int,null); ORGID   (FK,int,not null)

我已将表格作为'orghierarchy'加载到实体框架中,并将自我关系'child'的多边命名为单边'parent'。

我创建了一个ObservableCollection:

    private ObservableCollection<orghierarchy> _firstgeneration;
    public ObservableCollection<orghierarchy> FirstGeneration
    {
        get
        {
            if (OrgID != 0)
            {
                _firstgeneration = SetDivTree(OrgID);
            }
            return _firstgeneration;
        }

        set
        {
            if (value != _firstgeneration)
                _firstgeneration = value;
        }
    }

    public ObservableCollection<orghierarchy> SetDivTree(int _orgid)
    {
        ObservableCollection<orghierarchy> _temp;
        using (var context = new IFREntities())
        {
            var divs = from orghierarchies in context.orghierarchies.Include("child")
                       where orghierarchies.orgid == _orgid & orghierarchies.parentid == null
                       orderby orghierarchies.divshortname
                       select orghierarchies;

            _temp = new ObservableCollection<orghierarchy>(divs);
        }
        return _temp;
    }

“。include”似乎将所有子行返回到基于逐步执行代码的查询。

我的XAML

<TreeView x:Name="DivHierarchy" Margin="8" Grid.Row="5" Grid.Column="1" Grid.ColumnSpan="3" ItemsSource="{Binding FirstGeneration}" >
<TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding FirstGeneration.child}">
            <TextBlock Text="{Binding divname}" />
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
<TreeView.Background>
    <SolidColorBrush Color="{DynamicResource BigCtrlBackground}"/>
</TreeView.Background>

我的树视图是空的,我不确定问题是什么。

1 个答案:

答案 0 :(得分:0)

尝试此XAML,不包括所需的所有布局设置。你可以自己做。 :)

<TreeView x:Name="DivHierarchy" ItemsSource="{Binding FirstGeneration}" ItemTemplate="{StaticResource RootTemplate}" />

将以下内容添加到参考资料部分,例如:

<Window.Resources>
    <HierarchicalDataTemplate x:Key="ChildTemplate"
                              ItemsSource="{Binding Path=child}">
        <TextBlock Text="{Binding Path=divname}" />
    </HierarchicalDataTemplate>

    <HierarchicalDataTemplate x:Key="RootTemplate"
                              ItemTemplate="{StaticResource ChildTemplate}"
                              ItemsSource="{Binding Path=child}">
        <TextBlock Text="{Binding Path=divname}" />
    </HierarchicalDataTemplate>
</Window.Resources>

我认为它会起作用,但您也会在根级别中看到子条目。好!试试吧。