如何使用 db table 中的值绑定 ComboBox 并避免重复
How to bind a ComboBox with values from db table and avoid duplicates
在我的 WPF 项目中,我试图将组合框绑定到数据库 table 列并避免重复。我正在使用 Entity Framework。
到目前为止,我已经能够成功地将 Combobox 绑定到列(因为 EF 完成了大部分工作),但我无法摆脱重复项。
我的名为 Departments 的数据库有 2 列。一个名为 DepartmentID,一个名为 DepartmentName。 DepartmentName 是我想要的,也是重复的(这不是设置错误)。
我还有一个名为 Employees 的 table,它具有对 DepartmentID 的外键引用。
我尝试了一些使用 LINQ 和创建列表的建议,但没有成功。我试过将 Filter 与 collectionViewSource 一起使用。我试过转换器。我尝试过以各种方式使用 Distinct,最近我尝试对 DepartmentNames 进行分组。 None 成功。
这是当前显示的 DepartmentNames,但有很多重复项。
资源:
<CollectionViewSource x:Key="employeeViewSource" d:DesignSource="{d:DesignInstance {x:Type local:Employee}, CreateList=True}"/>
组合框:
<ComboBox x:Name="departmentNameComboBox" DataContext="{StaticResource employeeViewSource}"
ItemsSource="{Binding}" DisplayMemberPath="Department.DepartmentName" HorizontalAlignment="Left" Height="Auto" Margin="3" VerticalAlignment="Center" Width="120"/>
我真正想要的是那个该死的 ComboBox 只显示不同的部门名称。我以为这很容易,但是昨天花了一整天,我似乎不是。至少不适合我。 :-) 谁能帮忙?
我建议您只创建一个数据库对象,它只选择您实际需要的列并将您的组合框绑定到它。我发现这是最干净的解决方案,因为您只需更改源 table/view,组合框就会自动适应。
您可以执行原始查询:
var departments = context.Departments
.SqlQuery("SELECT Min(DepartmentId), DepartmentName FROM #tmp GROUP BY DepartmentName")
.ToList<Department>();
或使用 LINQ 对结果进行分组:
var departments = (from d in context.Department
group d by d.DepartmentName into g
select new Department
{
DepartmentId = g.Min(x => x.DepartmentId),
DepartmentId = g.Key
}.ToList();
在我的 WPF 项目中,我试图将组合框绑定到数据库 table 列并避免重复。我正在使用 Entity Framework。 到目前为止,我已经能够成功地将 Combobox 绑定到列(因为 EF 完成了大部分工作),但我无法摆脱重复项。
我的名为 Departments 的数据库有 2 列。一个名为 DepartmentID,一个名为 DepartmentName。 DepartmentName 是我想要的,也是重复的(这不是设置错误)。 我还有一个名为 Employees 的 table,它具有对 DepartmentID 的外键引用。
我尝试了一些使用 LINQ 和创建列表的建议,但没有成功。我试过将 Filter 与 collectionViewSource 一起使用。我试过转换器。我尝试过以各种方式使用 Distinct,最近我尝试对 DepartmentNames 进行分组。 None 成功。
这是当前显示的 DepartmentNames,但有很多重复项。
资源:
<CollectionViewSource x:Key="employeeViewSource" d:DesignSource="{d:DesignInstance {x:Type local:Employee}, CreateList=True}"/>
组合框:
<ComboBox x:Name="departmentNameComboBox" DataContext="{StaticResource employeeViewSource}"
ItemsSource="{Binding}" DisplayMemberPath="Department.DepartmentName" HorizontalAlignment="Left" Height="Auto" Margin="3" VerticalAlignment="Center" Width="120"/>
我真正想要的是那个该死的 ComboBox 只显示不同的部门名称。我以为这很容易,但是昨天花了一整天,我似乎不是。至少不适合我。 :-) 谁能帮忙?
我建议您只创建一个数据库对象,它只选择您实际需要的列并将您的组合框绑定到它。我发现这是最干净的解决方案,因为您只需更改源 table/view,组合框就会自动适应。
您可以执行原始查询:
var departments = context.Departments
.SqlQuery("SELECT Min(DepartmentId), DepartmentName FROM #tmp GROUP BY DepartmentName")
.ToList<Department>();
或使用 LINQ 对结果进行分组:
var departments = (from d in context.Department
group d by d.DepartmentName into g
select new Department
{
DepartmentId = g.Min(x => x.DepartmentId),
DepartmentId = g.Key
}.ToList();