在ComboBox中显示对象属性

时间:2013-07-01 10:21:44

标签: c# winforms

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

要将对象添加到Combobox,我会这样做:

    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覆盖中设置的内容?

4 个答案:

答案 0 :(得分:5)

关于我的评论,可能需要设置ComboBox的DisplayMemberValueMember属性,如此;

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

这样你的ComboBox将显示角色,但底层数据将是ID,所以当你通过SelectedValue属性选择时,你将获得ID。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

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

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

然后

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

你可以做任何类似的属性。

答案 3 :(得分:1)

添加此内容,

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