如何在 WPF DataGrid 中显示来自单独 table 的特定列?
How to display certain column from a separate table in WPF DataGrid?
我有两个 table,我们称它们为 T 和 V。
Table T 包含需要在数据网格中显示的所有数据,table V 包含有关 table T 中特定列的数据。因此 table T 包含来自 table V 的外键。
我想根据 table T 中的键显示来自 table V 的文本列。
通过使用
myDataGrid.ItemSource = List<T> myTableTList
和
<DataGrid Grid.Row="0"
Name="datesDG"
Margin="5, 5, 5, 5"
SelectionMode="Extended"
IsReadOnly="True"
AutoGenerateColumns="False"
ItemsSource="{Binding dates, Mode=TwoWay}">
<DataGrid.Columns>
<DataGridTextColumn Header="Key Column" Binding="{Binding Path=DateKey}" />
<DataGridTextColumn Header="Publish Date" Binding="{Binding Path=publishDate, StringFormat=\{0:dd.MM.yyyy\}}" />
<DataGridTextColumn Header="Editing Date" Binding="{Binding Path=editingDate, StringFormat=\{0:dd.MM.yyyy\}}"/>
<DataGridTextColumn Header="Data Status" Binding="{Binding Path=dataStatusKey}"/>
</DataGrid.Columns>
</DataGrid>
所以 dataStatusKey 是来自 table V 的外键,但我想显示来自 table V 对应于 dataStatusKey 的文本字段。
如果我用 T 类型的数据填充 DataGrid,我该怎么做?
我是否应该创建单独的 class 并用适当的字段填充它并制作一个列表,然后将我的网格的 ItemSource 设置为这个新的数据类型列表?
Should I create separate class and fill it up with appropriate fields and make a list of it and then set my grid's ItemSource to this new data type list?
是的。你基本上会这样做:
- 创建一个新的 class
X
,其中每列 属性 要显示在 DataGrid 中
- 使用您从视图模型中的
T
和 V
对象获得的数据填充它
- 将
ItemsSource
属性绑定到视图模型IEnumerable<X>
属性
注意,如果T
有一个导航属性,你可以直接绑定到这个:
<DataGridTextColumn Header="Text" Binding="{Binding Path=V.Text}"/>
我有两个 table,我们称它们为 T 和 V。
Table T 包含需要在数据网格中显示的所有数据,table V 包含有关 table T 中特定列的数据。因此 table T 包含来自 table V 的外键。
我想根据 table T 中的键显示来自 table V 的文本列。
通过使用
myDataGrid.ItemSource = List<T> myTableTList
和
<DataGrid Grid.Row="0"
Name="datesDG"
Margin="5, 5, 5, 5"
SelectionMode="Extended"
IsReadOnly="True"
AutoGenerateColumns="False"
ItemsSource="{Binding dates, Mode=TwoWay}">
<DataGrid.Columns>
<DataGridTextColumn Header="Key Column" Binding="{Binding Path=DateKey}" />
<DataGridTextColumn Header="Publish Date" Binding="{Binding Path=publishDate, StringFormat=\{0:dd.MM.yyyy\}}" />
<DataGridTextColumn Header="Editing Date" Binding="{Binding Path=editingDate, StringFormat=\{0:dd.MM.yyyy\}}"/>
<DataGridTextColumn Header="Data Status" Binding="{Binding Path=dataStatusKey}"/>
</DataGrid.Columns>
</DataGrid>
所以 dataStatusKey 是来自 table V 的外键,但我想显示来自 table V 对应于 dataStatusKey 的文本字段。
如果我用 T 类型的数据填充 DataGrid,我该怎么做?
我是否应该创建单独的 class 并用适当的字段填充它并制作一个列表,然后将我的网格的 ItemSource 设置为这个新的数据类型列表?
Should I create separate class and fill it up with appropriate fields and make a list of it and then set my grid's ItemSource to this new data type list?
是的。你基本上会这样做:
- 创建一个新的 class
X
,其中每列 属性 要显示在 DataGrid 中
- 使用您从视图模型中的
T
和V
对象获得的数据填充它 - 将
ItemsSource
属性绑定到视图模型IEnumerable<X>
属性
注意,如果T
有一个导航属性,你可以直接绑定到这个:
<DataGridTextColumn Header="Text" Binding="{Binding Path=V.Text}"/>