在dataGrid中获取项的名称而不是父ID

时间:2014-11-24 06:20:14

标签: c# wpf xaml datagrid

我的数据库中有一个名为Groups的表。这是该表的结构:

GroupID      |    int              |    not null, Primary Key  1------+
GroupName    |    nvarchar(100)    |    not null                      |
ParentID     |    int              |    null                   *------+

正如您在上表中看到的,ParentID列引用了GroupID。因此它是一个分层数据结构。

上表中的示例数据:

GroupID    |    GroupName    |    ParentID
-----------+-----------------+-------------
    1      |        a        |     NULL
    2      |        b        |     1
    3      |        c        |     NULL
    4      |        d        |     2
    5      |        e        |     1
    6      |        f        |     5

现在,我有一个DataGrid。在DataGrid里面我有两列。

第一列是Group Name,第二列是Parent Name

所以,我已经编写了所需的XAML来获得预期的输出:

<DataGrid Grid.Row="5" Grid.Column="1" ItemsSource="{Binding Groups}" 
          SelectedItem="{Binding SelectedGroup}"
          AutoGenerateColumns="False" CanUserAddRows="False"
          SelectionMode="Single" SelectionUnit="FullRow">

    <DataGrid.Columns>

        <DataGridTemplateColumn Header="Group Name">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding GroupName}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding GroupName}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>

        <DataGridTemplateColumn Header="Parent Name">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding ParentID}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <TextBox Text="{Binding ParentID}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
        </DataGridTemplateColumn>

    </DataGrid.Columns>

</DataGrid>

在上面的代码中我得到了输出:

    Group Name    |    Parent Name
------------------+-----------------
        a         |     
        b         |        1
        c         |     
        d         |        2
        e         |        1
        f         |        5

但我希望输出为:

    Group Name    |    Parent Name
------------------+-----------------
        a         |     
        b         |        a
        c         |     
        d         |        b
        e         |        a
        f         |        e

我知道我在第二列中使用了{Binding ParentID}。但是我应该用什么替换这个绑定来获得预期的输出。

1 个答案:

答案 0 :(得分:2)

假设您正在使用Group这样的课程:

public class Group
{
    public int GroupID { get; set; }
    public string GroupName { get; set; }
    public int ParentID { get; set; }
    public Group Parent { get; set; }
}

并且DataGrid的数据源是Group的集合,第二列的绑定表达式应如下所示:

<DataGridTemplateColumn Header="Parent Name">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Parent.GroupName}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <TextBox Text="{Binding Parent.GroupName}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

请注意,您必须使用延迟加载,或者从查询中显式加载对父组的引用:

context
    .Groups
    .Include(_ => _.Parent)
    .ToList();