Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在datagrid中显示外键值(linq到sql-wpf)_C#_Wpf_Linq To Sql - Fatal编程技术网

C# 如何在datagrid中显示外键值(linq到sql-wpf)

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

我的应用程序中有一个简单的数据网格,我想用我的一个表填充它, 除了ForeignKey列显示MyAppName.tableName而不是其他表中的值(PrimaryKeys)之外,其他一切都很正常

如何在外键列中显示值

下面是我的一段代码:

<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();
    }
}