C# 如何在datagrid中显示外键值(linq到sql-wpf)
我的应用程序中有一个简单的数据网格,我想用我的一个表填充它, 除了ForeignKey列显示MyAppName.tableName而不是其他表中的值(PrimaryKeys)之外,其他一切都很正常 如何在外键列中显示值 下面是我的一段代码:C# 如何在datagrid中显示外键值(linq到sql-wpf),c#,wpf,linq-to-sql,C#,Wpf,Linq To Sql,我的应用程序中有一个简单的数据网格,我想用我的一个表填充它, 除了ForeignKey列显示MyAppName.tableName而不是其他表中的值(PrimaryKeys)之外,其他一切都很正常 如何在外键列中显示值 下面是我的一段代码: <Grid> <DataGrid x:Name="DataGrid1" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="32
<Grid>
<DataGrid x:Name="DataGrid1" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="322" Width="704"/>
</Grid>
谢谢我怀疑问题出在
DataGrid
的自动生成列上
它迭代tbl_Airplanes
属性,并调用ToString
来表示外键关系(由自定义类表示,而不是已知类型)
这就是为什么外键的值是MyAppName.tableName
第一种方法:您可以通过定制
DataGrid
列来解决此问题:
<DataGrid x:Name="DataGrid1" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="322" Width="704" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTemplateColumn Header="Date Added">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding DateAdded}" BorderThickness="0" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Mass" Binding="{Binding Mass}" />
<DataGridTextColumn Header="Plane Id" Binding="{Binding Plane.Id}" />
</DataGrid.Columns>
</DataGrid>
首先,将DataGrid
xaml元素中的AutoGenerateColums
添加到False
(以禁用自动生成的行为)
结果(根据您的tbl\U飞机定制此结果):
<DataGrid x:Name="DataGrid1" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="322" Width="704" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTemplateColumn Header="Date Added">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding DateAdded}" BorderThickness="0" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Mass" Binding="{Binding Mass}" />
<DataGridTextColumn Header="Plane Id" Binding="{Binding Plane.Id}" />
</DataGrid.Columns>
</DataGrid>
这样,当自动生成列调用ToString
时,它将获得id
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
...
<DataGridTextColumn Header="Plane Id" Binding="{Binding Plane.Id}" />
</DataGrid.Columns>
<DataGrid x:Name="DataGrid1" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Height="322" Width="704" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<DataGridTemplateColumn Header="Date Added">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding DateAdded}" BorderThickness="0" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Header="Mass" Binding="{Binding Mass}" />
<DataGridTextColumn Header="Plane Id" Binding="{Binding Plane.Id}" />
</DataGrid.Columns>
</DataGrid>
class Plane
{
int Id;
public override string ToString()
{
return Id.ToString();
}
}