2017-02-05 51 views
1

私は非常に単純なことをやろうとしています - CheckedListBoxをオブジェクトのリストにバインドしてください。CheckedListBox DisplayMemberが表示されないのはなぜですか?

クラス定義

namespace Models 
{ 
    public class Department 
    { 
     public int ID { get; set; } 
     public string Description { get; set; } 
    } 
} 

問題

(最初にCheckedListBox clbDepartmentsを作成します)

に複製するための最小限の完全なコードサンプル
private void Form1_Load(object sender, EventArgs e) 
    { 
     List<Department> departmentList = new List<Department>(); 
     departmentList.Add(new Department { ID = 1, Description = "HR" }); 
     departmentList.Add(new Department { ID = 2, Description = "IT" }); 
     departmentList.Add(new Department { ID = 3, Description = "Sales" }); 

     var departmentBindingList = new BindingList<Department>(departmentList); 
     var departmentSource = new BindingSource(departmentBindingList, null); 
     clbDepartments.DisplayMember = "Description"; 
     clbDepartments.ValueMember = "ID"; 
     clbDepartments.DataSource = departmentSource; 
    } 

リストが結合 - 私はList<Department>の項目ごとにCheckboxListで一つの項目を見ることができます。

フィールドの値(DisplayMember)を表示する代わりに、各アイテムに"Models.Department"と表示されます。

予想される出力

HR

IT

販売


法UAL出力

Models.Department

Models.Department

Models.Department

私が間違って何をしているのですか?

+0

うーん。以前はこのコードを使用していました。アプリケーションが新しいバージョンのフレームワークにアップグレードされたかどうかはわかりません。バージョンに依存しているのだろうか? – Zesty

+0

間違いなく、非常に奇妙な暗い魔法が続いています!これは2歳のアプリケーションで、上記のコードサンプルは古い形式で使用されていました。同じコードを新しいフォームにコピー&ペーストすると、上記の動作が発生しました。私は古いスクリーンを試してみましたが、今は同じ問題があります。 – Zesty

答えて

4

注文を変更する必要があります。
はまず

DataSourceを設定してDisplayMemberを設定し、ValueMemberこれは動作するはずです:

clbDepartments.DataSource = departmentSource; 
clbDepartments.DisplayMember = "Description"; 
clbDepartments.ValueMember = "ID"; 
+0

それは働いた!しかし、それは奇妙です... TFSは、注文は同じであることを示していますが、何とかして働いていました。 – Zesty

関連する問題