我的数据库中有一个名为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}。但是我应该用什么替换这个绑定来获得预期的输出。
答案 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();