使用实体框架保存组合框值

本文关键字:组合 保存 框架 实体 | 更新日期: 2023-09-27 17:57:56

这个问题看起来很简单,但当我从组合框中保存所选项目时,我会得到这个结果

{ user_name = Amanda, user_id = 1 }

这是我加载组合框的代码片段

   //Task list ----> Load  users (Responsible person) into a combo box
    private void ComboResponsiblePerson()
    {
        //Get  list of users into the combo box
        //Task Tab
        BindingSource ResponsibleUser = new BindingSource();
        ResponsibleUser.DataSource = db.users.Select(_user => new
        {
            _user.user_name,_user.user_id
        }).ToList();
        if (ResponsibleUser != null)
        {
            cbResponsiblePerson.DataSource = ResponsibleUser;
            cbResponsiblePerson.DisplayMember = "user_name";
            //cbResponsiblePerson.d
            cbResponsiblePerson.ValueMember = "user_id";
        }
    }

这是我获取组合框所选项目的代码片段

task.responsible_person = cbResponsiblePerson.SelectedItem.ToString();

任务。Responsible_person是一个字符串属性。

这里我只想得到用户名。

使用实体框架保存组合框值

这是因为cbResponsiblePerson.SelectedItem是查询返回的匿名对象之一。对其执行ToString()将打印对象。如果您想要名称,您可能希望将匿名类型定义为真实类型。

如果您在WinForms中,您可以执行以下操作:

cbResponsiblePerson.GetItemText(cbResponsiblePerson.SelectedItem)

为什么在之前启动ResponsibleUser时用null检查它!。

获取user_name:

cbResponsiblePerson.Text

并得到user_id:

cbResponsiblePerson.SelectedValue

你的DataSource有Ananymouse Type成员,你可以使用Reflection来获取值:

 var selectedItem = cbResponsiblePerson.SelectedItem;
 var idp = selectedItem.GetProperty("user_id");
 var namep = selectedItem.GetProperty("user_name");
 var user_id  = idp.GetValue(selectedItem);
 var user_name = namep.GetValue(selectedItem);