2013-10-03 2 views
1

Так что я класс называется CustomerCollectionСвязывание двух полей объекта из списка

class CustomerCollection 
    { 
     public List<Customer> Customers { get; private set; } 
... 
} 

, что имеет список customers

class Customer 
{ 
    public String ID { get; private set; } 
    public String Name { get; private set; } 

    public Customer(String id, String name) 
    { 
     ID = id; 
     Name = name; 
    } 
} 

Есть прочь, чтобы связать поле со списком и текст чтобы combobox отобразил все возможные идентификаторы Customers в Customer Collection, и в текстовом поле отобразится имя выбранного клиента?

EDIT: Так вот что я пытался

private void InitializeCustomerCollection() 
    { 
     var customerCollection = new CustomerCollection(); 
     cmbx_custID.DataSource = customerCollection.Customers; 
    } 

Но это не работает, и результаты выпадающий наполняются

X.Collections.Customer 
X.Collections.Customer 
X.Collections.Customer 
+0

Да, это возможно. Какую платформу вы используете? WPF? WinForms? ASP.NET? – PoweredByOrange

+0

Winform. Я забыл пометить его как таковой. Сожалею. – Wusiji

+0

Я не уверен, как это сделать в WinForms. Однако причина, по которой вы видите вывод, как вы показали, состоит в том, что он не знает, как отображать текущий объект. Вам либо нужно предоставить DisplayMemberPath (это то, что было бы в xaml/wpf), либо перегрузить метод класса .ToString() для использования имени вашего клиента. – gleng

ответ

3

Это демонстрирует добавление поля со списком в форму с поведением, которое вы отправляете Риба. Ключ - установка ValueMember и DisplayMember.

public partial class Form1 : Form 
    { 
    public Form1() 
    { 
     InitializeComponent(); 
     CustomerCollection cc = new CustomerCollection(); 
     cc.Customers.AddRange(new Customer[] {new Customer("1", "Adam"), new Customer("2", "Bob")}); 

     ComboBox ComboBox1 = new ComboBox() 
      {Name = "ComboBox1", ValueMember = "ID", DisplayMember = "Name"}; 
     Controls.Add(ComboBox1); 

     ComboBox1.DataSource = cc; 
    } 
    } 

    public class Customer 
    { 
    public String ID { get; private set; } 
    public String Name { get; private set; } 

    public Customer(String id, String name) 
    { 
     ID = id; 
     Name = name; 
    } 
    } 

    class CustomerCollection : IListSource 
    { 
    public List<Customer> Customers { get; private set; } 
    public CustomerCollection() 
    { 
     Customers = new List<Customer>(); 
    } 

    public bool ContainsListCollection 
    { 
     get { return true; } 
    } 

    public System.Collections.IList GetList() 
    { 
     return Customers; 
    } 
    } 
+0

Работал как шарм. Благодаря! – Wusiji

0

В WPF вы можете сделать что-то вроде следующего :

<ComboBox ItemSource={Binding Customers} x:Name="SelectedComboBox"/> 
<TextBox Text={Binding SelectedItem.Name, ElementName=SelectedComboBox/> 
Смежные вопросы