2

我有一个自定义对象,其中包含有关项目资源的详细信息。属性为 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 显示“未分配”。我怎样才能让它显示角色属性?有没有办法将对象保存在 Comboxbox 项中,但在显示中显示不同的属性,而不是我在 ToString 覆盖中设置的属性?

4

4 回答 4

6

关于我的评论,可能需要像这样设置组合框的DisplayMemberValueMember属性;

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

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

于 2013-07-01T10:31:57.380 回答
1

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

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

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

于 2013-07-01T10:27:05.407 回答
1

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

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

然后

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

你可以做任何这样的属性。

于 2013-07-01T10:28:34.203 回答
1

添加这个,

private void InitializeComponent()
    {
      cmbRoles.ValueMember = "id"; 
      cmbRoles.DisplayMember = "discription";
    }
于 2013-07-01T10:30:24.327 回答