2013-04-04 10 views
6

Mục đích là để xem danh sách dưới dạng danh sách 'tên'.C# Tôi có thể hiển thị một thuộc tính của một đối tượng trong một từ điển như ListControl.DisplayMember?

Dưới đây là các từ điển:

class Scripts 
    { 
     public Dictionary<int, Script> scripts = new Dictionary<int, Script>(); 
     ... 
    } 

Đây là thuộc tính 'tên' Tôi sau:

class Script 
    { 
     public string name { get; set; } 
     ... 
    } 

và đây là vấn đề:

public partial class MainForm : Form 
{ 
    Scripts allScripts; 

    public MainForm() 
    { 
     InitializeComponent(); 
     allScripts = new Scripts(); 
     setupDataSources(); 
    } 

    private void setupDataSources() 
    { 
     BindingSource ketchup = new BindingSource(allScripts.scripts, null); 
     //THIS LINE: 
     listBoxScripts.DisplayMember = allScripts.scripts["Key"].name.ToString(); 
     listBoxScripts.ValueMember = "Key"; 
     listBoxScripts.DataSource = ketchup; 
    } 
    ... 
} 

Tôi chỉ có thể không nghĩ cách làm cho dòng đó hoạt động! Lời khuyên của bạn được đánh giá cao!

Cảm ơn

Trả lời

3

Bạn có thể gắn vào Value và ghi đè ToString phương pháp trong Script lớp.

private void setupDataSources() 
{    
    BindingSource ketchup = new BindingSource(allScripts.scripts, null); 
    listBoxScripts.DisplayMember = "Value"; 
    listBoxScripts.ValueMember = "Key"; 
    listBoxScripts.DataSource = ketchup;    
} 

Script lớp:

class Script 
{ 
    public string name { get; set; } 

    public override string ToString() 
    { 
     return name; 
    } 
} 
+0

Perfect, cảm ơn! – StringsOnFire

0

Bạn đang thiết lập các giá trị thực tế của 'tên' như DisplayMember, vì vậy trừ khi bạn ngẫu nhiên nhận được một giá trị trong 'tên' đặt thành văn bản giống như một tài sản sau đó bạn sẽ không bao giờ làm cho nó được hiển thị.

Bạn muốn được tốt hơn hết chỉ cần thực hiện:

listBoxScripts.DisplayMember = "name"; 

Chắc chắn?

0

Hãy thử đúc các yếu tố từ điển như một đối tượng Script

listBoxScripts.DisplayMember = ((Script)allScripts.scripts["Key"]).name.ToString();