【问题标题】:WPF DataBinding ForeignKey value not dispalyedWPF 数据绑定外键值未显示
【发布时间】:2019-07-31 10:00:42
【问题描述】:

我正在尝试在 WPF DataGrid 中显示外键值。问题是当我加载窗口时,数据网格字段保持为空。但是当我插入或更新数据(操作发生在单独的窗口中),并且刷新数据网格时,值会正确显示。

我就是这样绑定的:

<DataGridTextColumn Header="Team" Binding="{Binding Team.TeamName}"/>

DataGrid 控件在EmployeesWindow.xaml 这是带有外键的表:

 public class Employee
{
    [Key]
    public int EmployeeId { get; set; }
    public string EmployeeName { get; set; }
    //..
    [ForeignKey("Team")]
    public int TeamId { get; set; }
    public Team Team { get; set; }
}

这是被引用的表

public class Team
{
    [Key]
    public int TeamId { get; set; }
    public string TeamName { get; set; }
    public int TeamBonus { get; set; }        
}

EmployeesWindow.xaml:

public static DataGrid datagrid;
public EmployeesWindow()
    {
        InitializeComponent();
        datagrid = EmployeeDataGrid;
        datagrid.ItemsSource = _db.Employees.ToList();
    }

TeamsWindow.xaml:

 private void AddEmployee_Click(object sender, RoutedEventArgs e)
    {
        //..
        EmployeesWindow.datagrid.ItemsSource = _db.Employees.ToList();
        this.Hide();
    }

如何在 WPF DataGrid 数据绑定中显示外键值?

【问题讨论】:

    标签: c# wpf data-binding


    【解决方案1】:

    我猜这是您正在使用的实体框架,_db 是一个 dbcontext。

    EF 默认使用延迟加载相关表。

    看看你的 linq 将产生的 sql。

    How do I view the SQL generated by the Entity Framework?

    我希望你会发现 _db.Employees.ToList();只是给出“从员工中选择 *”之类的内容。

    您还需要明确告诉它读取 Teams。

    假设表的名称是 Teams,则为:

    datagrid.ItemsSource = _db.Employees.Include("Teams").ToList();

    不要只是把它粘贴进去然后按 f5。检查你的表名是什么以及它将产生什么 sql。

    每次使用 linq 时,都要习惯于检查它产生的 sql。使用像这样的简单内容,您应该会立即在原始查询中看到没有与 Teams 的内部连接。对于更复杂的东西,你可以很容易地发现 LINQ 会产生糟糕的 sql。

    http://www.entityframeworktutorial.net/lazyloading-in-entity-framework.aspx

    https://docs.microsoft.com/en-us/ef/ef6/querying/related-data

    顺便说一句。

    从架构上讲,从数据库中读取整个表并直接呈现给 UI 在几个方面都不好。也许这只是原型的东西,但您将使用 viewmodel、observablecollection、mvvm、tolistasync 并在生产版本中过滤掉您的 200,000 名员工。

    【讨论】:

      猜你喜欢
      • 2014-07-30
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 2013-05-31
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多