2013-11-21 2 views
1

Я пытаюсь использовать Список объектов <> объектов моего пользовательского класса в качестве источника для ListBox. Проблема заключается в том, что вместо строк, отображаемых как элемент в моем ListBox, вся строка разбита, а отдельные символы превращаются в элементы ListBox. Ниже приведен мой класс и репликация на ListBox. Я храню список в другом классе.Использование списка <> as BindingSource в C#

Что я делаю неправильно? Или, может быть, существует лучший способ привязки ListBox к списку <>?

Листинг 1 - репликация

  BindingSource bds1 = new BindingSource(_newProspectiveCustomer.PhoneNumbers, "PhoneNumber"); 
     phonesListBox.BeginUpdate(); 
     phonesListBox.DataSource = bds1; 
     phonesListBox.EndUpdate(); 

Листинг 2 - класс

public class PCPhone : IEnumerable<string> 
    { 
     public string Dma { get; set; } 
     public IEnumerator<string> GetEnumerator() 
     { 
      yield return Dma; 
      yield return PhoneNumber; 
      yield return IndexOrder.ToString(); 
      yield return Type.ToString(); 
     } 

     System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() 
     { 
      return this.GetEnumerator(); 
     } 

     private string _phoneNumber, 
         _type, 
         _notes; 
     private int _indexOrder; 
     public event EventHandler PhoneChanged; 

     public string PhoneNumber 
     { 
      get 
      { 
       return _phoneNumber; 
      } 
      set 
      { 
       _phoneNumber = value; 
       CleanPhoneString(); 
      } 
     } 
     public string Type 
     { 
      get 
      { 
       return _type; 
      } 
      set 
      { 
       _type = value; 
      } 
     } 
     public string Notes 
     { 
      get 
      { 
       return _notes; 
      } 
      set 
      { 
       _notes = value; 
      } 
     } 
     public int IndexOrder 
     { 
      get 
      { 
       return _indexOrder; 
      } 
      set 
      { 
       _indexOrder = value; 
      } 
     } 
     private void CleanPhoneString() 
     { 
      if(_phoneNumber.IndexOf("(") > -1) 
       _phoneNumber = _phoneNumber.Remove('('); 
      if(_phoneNumber.IndexOf(")") > -1) 
       _phoneNumber = _phoneNumber.Remove(')'); 
      if(_phoneNumber.IndexOf(" ") > -1) 
       _phoneNumber = _phoneNumber.Remove(' '); 
      if(_phoneNumber.IndexOf("-") > -1) 
       _phoneNumber = _phoneNumber.Remove('-'); 
     } 

     public PCPhone(string t, int i, string num) 
     { 
      _type = t; 
      _indexOrder = i; 
      _phoneNumber = num; 
      CleanPhoneString(); 
     } 
    } 
+0

Какой тип '_newProspectiveCustomer.PhoneNumbers'? a 'Список '? так что такое определение «PhoneNumber»? –

+0

Около 90% кода в вашем примере не имеет значения, и вам не хватает важных частей, как указывает @KingKing. http://sscce.org/ –

ответ

0

Предполагая, что список является Список PCPhone только

BindingSource bds1 = new BindingSource() { DataSource = list }; 
listBox1.DisplayMember = "PhoneNumber"; 
listBox1.ValueMember = ... ; // value member 
listBox1.DataSource = bds1; 

или просто установить непосредственно список в listbox1 datasource

listBox1.DisplayMember = "PhoneNumber"; 
listBox1.ValueMember = ... ; // value member 
listBox1.DataSource = list; 
+0

Ну, вы правы. Я просто загрузил список <> в источник данных listbox. Я сделал это до этого без успеха, но в то время у меня не было класса PCPhone, связанного с IEnumerable. – ArtK

+0

Это не PCPhone, который должен быть перечислим, просто список. –