2009-10-22 23 views
6

Bunun basit bir sorun olduğunu düşündüm, ama web'de hiçbir bilgi bulamıyorum. Ben şöyle BindingSource kullanarak List bir ListBox bağlama ediyorum: Ben eklemek veya customers listeden silerken benim ListBox (hatta BindingSource üzerine ResetBindings kullanmadan) güncellenir, ŞimdiListBox, DataSource için değişiklikleri göstermiyor

List<Customer> customers = MyMethodReturningList(); 

BindingSource customersBindingSource = new BindingSource(); 
customersBindingSource.DataSource = customers; 

customersListBox.DataSource = customersBindingSource; 

, ama herhangi bir değişiklik olursa Listedeki müşteri nesnelerini değil. ResetBindings numaralı telefonun hiç bir etkisi yoktur. Kendi BindingList'u bile uyguladım, ancak davranış değişmedi.
Customer sınıfı, verilere erişmek ve değiştirmek için özellikleri kullanır. Listesinde ToString() içeriği görüntülenir.

C# in .Net 2.0 kullanıyorum.

Herhangi bir fikrin var mı?

Teşekkür

cevap

4

Tamam, burada bir kirli Çözüm şudur: Eğer veri kaynağı = null set kutu içeriğini yenilemeye gerek wenever, ardından rebind. Listede nesneler değişmemiştir çünkü

o güncelleme değildir nedenidir ve sadece ziyade onların içeriklerinin daha nesnenin YARALANILAN denetler.

+0

Evet, sanırım sonunda yaptığım buydu (şu an kodum yok) ama dediğin gibi kirli. –

+0

Başka bir sorun da, veri kaynağı tasarım zamanı ayarlarını kaybeder örn. DisplayMember ve ValueMember özellikleri kaldırıldı. – Softec

2

Liste kutusunda, bu soruna neden olabilecek bir hata da var. SelectionMode öğesini Yok olarak ayarlarsanız bu sorun görüntülenir.

Çevrenizdeki bir çalışma olarak, veri kaynağını güncellerken seçim modunu Bir olarak ve ardından Yok olarak ayarlayın. Eğer bir BindingList kullanırsanız

5

bile gerek yok BindingSource: Kaynağını güncellerken diziye veriyi dönüştürerek bu sorunu gidermek lazım

BindingList<Customer> customers = new BindingList<Customer>(MyMethodReturningList()); 
customersListBox.DataSource = customers; 
0

. Lütfen UpdateData yöntemine bakınız. Bu şekilde açılan kutunuzu ComboBox Ayarlarını kaybetmeden güncelleyebilirsiniz.

class Person { 
    public int Id {get; set; } 
    public string FirstName{ get; set; } 
    public string SurName {get; set; } 
} 

public Form1() 
{ 
    InitializeComponent(); 
    comboBox1.DisplayMember = "FirstName"; 
    comboBox1.ValueMember = "Id"; 
    comboBox1.DataSource = m_PersonList; 
} 

public void UpdateData() { 
    m_PersonList[0].FirstName = "Firstname1"; 
    comboBox1.DataSource = m_PersonList.ToArray<Person>(); 
} 
0

bu soru neredeyse 6 yıl önce istendi ancak diğer çözüm yolları daha Burada bir doğru cevabı göremiyorsanız anlıyoruz. Koleksiyondaki bir öğenin özelliğini değiştirdiğinizde, olay öğe (nesne) için değil, koleksiyon için yükseltilir. Böylece koleksiyon bir değişiklik görmüyor ve bağlı denetimleri yenilemeyecektir. Tüm bağlayıcı koleksiyonlar içindeki öğeler ve List<> gibi en genel koleksiyonlar 2 olay, PropertyChanging ve PropertyChanged alır. Koleksiyondaki elemanın bir özelliği değiştirildiğinde, olay tetiklenir. Tek yapmanız gereken, Collection numaralı telefondan yeniden bağlamayı veya bir etkinliği yükseltmeyi tetikleyen bir olay işleyicisi eklemektir.