簡體   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