在数据网格中获取项的名称而不是父 ID

本文关键字:ID 数据网 数据 网格 获取 | 更新日期: 2023-09-27 18:31:45

我的数据库中有一个名为"组"的表。以下是该表的结构:

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

如上表所示,"父 ID"列引用的是组 ID。因此,它是一个分层数据结构。

上表中的示例数据:

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

现在,我有一个数据网格。在该数据网格中,我有两列。

第一列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

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

在数据网格中获取项的名称而不是父 ID

假设你像这样使用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();