gpt4 book ai didi

winforms - 如何将 Entity Framework 关联绑定(bind)到 ComboBox?

转载 作者:行者123 更新时间:2023-12-03 22:15:05 26 4
gpt4 key购买 nike

我正在开发一个内部软件跟踪程序,每个程序修订版都从员工数据库中分配了一个首席程序员。到目前为止,我的简单模型如下所示:

Entity Framework model

最初我有一个 RevisionBindingSource绑定(bind)到我的 Revisions 的对象收藏:

Dim container as new EntityContainer
revisionBindingSource.DataSource = container.Revisions
...
dgRevisions.DataSource = revisionBindingSource
dgRevisions.DataMemeber = ""

这很好用,我能够绑定(bind)到我需要的各种属性,例如应用程序标题:
lblAppTitle.DataBindings.Add("Text",revisionBindingSource,"Application.Title")

但是,我现在需要一个 ComboBox,其项目绑定(bind)到员工列表,并且其选定值绑定(bind)到当前版本的首席程序员。我尝试制作一个新的 employeeBindingSource ,但意识到我没有 Value 的绑定(bind)成员:
employeeBindingSource.DataSource = container.Employees
...
cboLead.DataSource = employeeBindingSource
cboLead.DisplayMember = "Name.Display" 'Name is a complex type'
cboLead.ValueMember = '??

所以我重写了我的一些绑定(bind),只有一个 bindingSource :
bindingSource.DataSource = container
...
dgRevisions.DataSource = bindingSource
dgRevisions.DataMemeber = "Revisions"
...
cboLead.DataSource = bindingSource
cboLead.DisplayMember = "Employees.Name.Display"
cboLead.ValueMember = "Employees"
...
lblAppTitle.DataBindings.Add("Text",bindingSource,"Revisions.Application.Title")

这仍然没有用任何东西填充 ComboBox。

哪种模式更适合我使用 - 两个不同的绑定(bind)源,还是一个?我在绑定(bind)我的 ComboBox 时做错了什么?一旦我的 ComboBox 填充,我如何将当前值绑定(bind)到修订版的首席程序员?

对不起,冗长的问题,谢谢。

最佳答案

在您的表单上拥有多个绑定(bind)源并没有错。实际上,像您上面建议的那样“链接”绑定(bind)源可能是一种方便的策略。

但是,在这种情况下,您需要填写一个缺失链接以支持绑定(bind) .Value。实际 EF 对象的属性:您需要为绑定(bind)目的创建一个单独的类。 此技术在绑定(bind)到枚举时也非常有用。

当您的 EF 数据模型与您希望 UI 的工作方式不完全匹配时,此技术非常常见。对于 WPF(不是本示例中的 WinForms),这通常被称为 ViewModel 的一部分。这样做几次后,它就会成为第二天性。

这是您需要创建的类的示例实现:

public class EmployeeBindingObject
{
public Employee Employee { get; private set; }
public string EmployeeName
{
get { return this.Employee.Name; }
}

private EmployeeBindingObject(Employee employee)
{
this.Employee = employee;
}

/// <summary>
/// Gets a binding list for a specified list of Employees.
/// </summary>
/// <param name="types"></param>
/// <returns></returns>
public static IBindingList GetBindingList(IEnumerable<Employee> employees)
{
BindingList<EmployeeBindingObject> result = new BindingList<EmployeeBindingObject>();

foreach (var ee in employees)
{
result.Add(new EmployeeBindingObject(ee));
}

return result;
}
}

创建此类后,您应该编译并为 EmployeeBindingObject 创建一个数据源(数据 -> 添加新数据源...)。
  • 设置ValueMemberEmployee
  • 设置DisplayMemberEmployeeName
  • 设置SelectedValue属性到您的其他 BindingSource 的 Employee属性(property)。
  • 然后,在您的代码中,您需要初始化绑定(bind)对象 BindingSource,如下所示:
     employeeBindingObjectBindingSource.DataSource = 
    EmployeeBindingObject.GetBindingList(container.Employees)
  • 关于winforms - 如何将 Entity Framework 关联绑定(bind)到 ComboBox?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7001639/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com