在组合框中显示来自外键约束的显示名称。

16 浏览
0 Comments

在组合框中显示来自外键约束的显示名称。

我有三个表,分别是Employee、ClientEmp和Client。

ClientEmp表中有Employee(EmployeeID)和Client(ClientID)的外键。

到目前为止,我能够根据所选的Client在我的数据库中保存对ClientEmp的更改(使用EF)。但是,我必须手动在一个文本框中输入EmployeeID外键才能匹配数据以保存。

显然,如果用户不知道EmployeeID FK应该输入到文本框中,这样做并不友好。

因此,是否有一种方法可以使用Employee表中的Employee Firstname的列表来显示一个组合框,然后将其保存到数据库中?

我尝试过这个,但似乎不起作用。

ItemsSource="{Binding Source={StaticResource Employee}}"

DisplayMemberPath="FirstName"

SelectedValuePath="EmployeeID">

我还尝试使用这个链接和这个链接来帮助,但没有成功。我做错了什么?

非常感谢您的帮助。

0
0 Comments

问题的出现原因:

问题是在ComboBox的DisplayMemberPath属性中无法显示外键约束的显示名称。根据提供的代码,ComboBox的ItemsSource绑定了一个ObjectDataProvider,该ObjectDataProvider调用了ViewModel中的GetEmp方法来获取Employee的列表。ComboBox的DisplayMemberPath属性被设置为"FirstName",以便在ComboBox中显示Employee的名字。然而,由于外键约束的存在,这个设置并不起作用,导致ComboBox中显示的是Employee的ID而不是名字。

解决方法:

要解决这个问题,需要对ComboBox的ItemsSource进行修改,以便能够显示外键约束的显示名称。一种解决方法是在ViewModel中修改GetEmp方法,使其返回包含Employee ID和FirstName的自定义对象列表。然后将这个自定义对象列表绑定到ComboBox的ItemsSource,并设置DisplayMemberPath为"FirstName"。这样就可以在ComboBox中正确地显示Employee的名字了。

修改后的代码如下:

public class EmployeeWithName
{
    public int EmployeeID { get; set; }
    public string FirstName { get; set; }
}
public IEnumerable GetEmp() 
{
    var employees = context.Employees;
    var employeesWithName = employees.Select(e => new EmployeeWithName { EmployeeID = e.EmployeeID, FirstName = e.FirstName });
    return employeesWithName;
}

然后,在XAML中将ComboBox的ItemsSource修改为绑定到这个新的EmployeeWithName对象列表:


这样就可以正确地在ComboBox中显示Employee的名字了。

0