在数据网格中获取项的名称而不是父 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}。但是我应该用什么替换这个绑定以获得预期的输出。
假设你像这样使用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();