在组合框中显示对象属性
本文关键字:对象 属性 显示 组合 | 更新日期: 2023-09-27 18:20:28
我有一个自定义对象,它包含有关项目资源的详细信息。属性为PersonName、Position和Id如果资源未填充,则PersonName将设置为"Unassgined"。
要将对象添加到组合框中,我需要:
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。
但是,我想在组合框中显示"角色"。
但是,我的对象的ToString显示为"Unassigned"。如何使其显示Role属性?有没有一种方法可以将对象保存在Comboxbox项中,但在显示中显示不同的属性,而不是我在ToString覆盖中设置的属性?
关于我的注释,可能需要设置组合框的DisplayMember
和ValueMember
属性,如下所示;
cmbRoles.DisplayMember = "Role";
cmbRoles.ValueMember = "Id";
cmbRoles.DataSource = avail;
这样,您的组合框将显示角色,但基础数据将是ID,因此,当您通过SelectedValue
属性进行选择时,您将获得ID。
您是否尝试过使用DisplayMember属性来区分显示值和实际值?如果您这样做,您应该能够将角色设置为组合框上显示的条目。
cmbRoles.DisplayMember = "" + Role;
cmbRoles.ValueMember = "Id";
cmbRoles.DataSource = avail;
我不确定你的代码中的角色是什么,但你应该能够从中得到要点。
添加此项,
private void InitializeComponent()
{
cmbRoles.ValueMember = "id";
cmbRoles.DisplayMember = "discription";
}
您可以使用只读属性完全删除ToString()
public string FullInfo
{
get
{
return ResourceType + " - " + AssignedPerson.Firstname + " " + AssignedPerson.Surname;
}
}
然后
comboBox.DisplayMember = "FullInfo";
comboBox.ValueMember = "Id";
comboBox.DataSource = avail;
你可以做这样的任何性质。