如何在WPF DataGrid中的单独表中显示某些列?

时间:2018-10-09 09:19:48

标签: c# wpf entity-framework-4 wpfdatagrid

我有两个表,我们称它们为T和V。

表T包含显示在数据网格中所需的所有数据,表V包含表T中某些列的数据。因此表T包含表V中的外键。

我想根据表T中的键显示表V中的文本列。

通过

<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>

$('#exam_sub_type_element_multiple').selectpicker('refresh');

所以dataStatusKey是表V中的外键,但我想显示表V中与dataStatusKey对应的文本字段。

如果我用T类型的数据填充DataGrid,该怎么办?

我应该创建单独的类并用适当的字段填充它并列出它,然后将网格的ItemSource设置为这个新的数据类型列表吗?

1 个答案:

答案 0 :(得分:3)

  

我应该创建单独的类并用适当的字段填充它并列出它,然后将网格的ItemSource设置为这个新的数据类型列表吗?

是的。您基本上会这样做:

  • 创建一个新类X,每列要在DataGrid中显示一个属性
  • 使用从视图模型中的TV对象获得的数据填充它
  • ItemsSource属性绑定到视图模型的IEnumerable<X>属性

请注意,如果T具有导航属性,则可以直接绑定到该属性:

<DataGridTextColumn Header="Text" Binding="{Binding Path=V.Text}"/>