在组合框中显示来自外键约束的显示名称。
在组合框中显示来自外键约束的显示名称。
我有三个表,分别是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">
我还尝试使用这个链接和这个链接来帮助,但没有成功。我做错了什么?
非常感谢您的帮助。
问题的出现原因:
问题是在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 IEnumerableGetEmp() { 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的名字了。