繁体   English   中英

在ComboBox中显示对象属性

[英]Display object propery in ComboBox

我有一个自定义对象,其中包含有关项目资源的详细信息。 属性是PersonName,Position和Id。如果没有填写资源,PersonName将设置为“未确定”。

要将对象添加到组合框,请执行以下操作:

    var avail = s.GetUnassignedPrintRoles(SprintId);
    foreach (var o in avail)
    {
        cmbRoles.Items.Add(o);
    }

在显示资源列表时很好。 我的对象有一个重写的ToString()方法:

public override string ToString()
        {
            if(AssignedPerson != null)
                return ResourceType + " - " + AssignedPerson.Firstname + " " + AssignedPerson.Surname;
            return "Unassigned";
        }

但是,我有一个屏幕,显示未分配角色的列表。 因此,我得到一个列表,其中Person为NULL。

但是,我想在ComboxBox中显示“角色”。

但是,我对象的ToString显示为“未指定”。 如何使其显示Role属性? 有没有一种方法可以将对象保存在Comboxbox项中,但在显示中显示其他属性,而不是在ToString覆盖中设置的属性?

关于我的评论,可能需要像这样设置ComboBox的DisplayMemberValueMember属性。

cmbRoles.DisplayMember = "Role";
cmbRoles.ValueMember = "Id";
cmbRoles.DataSource = avail;

这样,您的ComboBox将显示角色,但基础数据将是ID,因此,当您通过SelectedValue属性进行SelectedValue ,您将获得ID。

您是否尝试过使用DisplayMember属性来区分显示值和实际值? 如果这样做,则应该可以将“角色”设置为组合框上显示的条目。

cmbRoles.DisplayMember = "" + Role;
cmbRoles.ValueMember = "Id";
cmbRoles.DataSource = avail;

我不确定代码中的角色是什么,但是您应该能够从中获得要点。

您可以使用只读属性完全删除ToString():

public string FullInfo
{
    get
    {
       return ResourceType + " - " + AssignedPerson.Firstname + " " + AssignedPerson.Surname;
    }
}

然后

 comboBox.DisplayMember = "FullInfo";
 comboBox.ValueMember = "Id";
 comboBox.DataSource = avail;

您可以执行任何此类的属性。

加上这个

private void InitializeComponent()
    {
      cmbRoles.ValueMember = "id"; 
      cmbRoles.DisplayMember = "discription";
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM