2

プロジェクト リソースに関する詳細を保持するカスタム オブジェクトがあります。プロパティは 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 であるリストを取得します。

しかし、ComboxBoxに「Role」を表示したい。

しかし、私のオブジェクトの ToString には「未割り当て」と表示されます。Role プロパティを表示するにはどうすればよいですか? オブジェクトを Comboxbox 項目に保存する方法はありますが、ToString オーバーライドで設定したものとは別のプロパティをディスプレイに表示する方法はありますか?

4

4 に答える 4

6

私のコメントに関しては、ComboBox のプロパティDisplayMemberとプロパティを次のように設定する必要があるかもしれません。ValueMember

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

このように ComboBox はロールを表示しますが、基になるデータは ID になるため、プロパティを介して選択するとSelectedValueID が取得されます。

于 2013-07-01T10:31:57.380 に答える
1

これを追加 、

private void InitializeComponent()
    {
      cmbRoles.ValueMember = "id"; 
      cmbRoles.DisplayMember = "discription";
    }
于 2013-07-01T10:30:24.327 に答える
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 に答える