2011-02-01 26 views
11

Her iki combobox'ın neden her ikisi de aynı değerlere sahip olacak şekilde tetiklediğini sorabilir miyim? Tek bir listeyi paylaşamıyorum ve farklı seçili metinlere sahip 2 combobox'ım var mı?Paylaş ComboBox DataSource

private void Form1_Load(object sender, EventArgs e) 
    { 
     BindingList<string> list = new BindingList<string>(); 
     list.Add("A"); 
     list.Add("B"); 
     list.Add("C"); 
     list.Add("D"); 

     bind(cbo1, list); 
     bind(cbo2, list); 
    } 

    private void bind(ComboBox combobox, BindingList<string> list) 
    { 
     // commented lines are in actual code, 
     // but appears unimportant in this question 
     //combobox.DropDownStyle = ComboBoxStyle.DropDown; 
     //combobox.AutoCompleteSource = AutoCompleteSource.ListItems; 
     //combobox.AutoCompleteMode = AutoCompleteMode.Suggest; 
     combobox.DataSource = list; 
     //combobox.Focus(); 
     //combobox.Text = string.Empty; 
     //combobox.SelectedText = string.Empty; 
    } 

GÜNCELLEME: Tamam, şimdi sorun DataSource otomatik listesini senkronize etmek bazı BindingContext ve CurrencyManagerCancelCurrentEdit tarafından yönetildiğini öğrendim. Ama birinin bu davranışı nasıl devre dışı bırakacağını bilmesi gerektiğini hissediyorum.

2 farklı liste kullanmak istemiyorum çünkü bu tek listeyi çalışma zamanında değiştirebilmek ve değişikliklerin tüm ComboBox'larda yansıtılmasını istiyorum. Bunu başarmak için herhangi bir yöntem büyük takdir edilecektir.

+0

Tamam, bunu doğrulayabilirim. Bind() 'i sadece' cbo1.DataSource = liste; ' –

+0

@ Hi? – Jake

+0

Tam sebebini bilmiyorum, sadeleştirme sorunu daha iyi tanımlamaktır (dar). –

cevap

7

Sen böyle "çözmek" için:

// combobox.DataSource = list; 
var curr = new BindingSource(list, null);   
combobox.DataSource = curr; 

senkronize 2 cbx tutuyordu her Form bağlı bir varsayılan BindingSource (currencyManager) yoktur. Ama kesin kuralların burada olduğundan emin değilim. Yukarıdakilerin iyi bir fikir olup olmadığı konusunda emin değilim.

Küçük listeler için sadece ayrı kopyalar yapardım.

+0

Neredeyse kafamı duvara çarptırabilirim. "Cbo1.DataSource = list" i ayarlamamı istediğini biliyorsunuz ve bind() çağrıları çağrılırken bu satırı Form_Load'da aldım. BindingSource bind() içinde denedim, bu işe yaramadı ... sadece eklemek için benim durumum için, liste ile çalışmayacak. BindingList gerekli. Teşekkürler! – Jake

0

Aynı nesneyi, 2 ayrı açılan kutu için veri kaynağı olarak kullanamazsınız. list1 ve list2 olmalıdır ve her biriyle her birleşik kutuyu doldurmalısınız. Aynı veri kaynağının kullanılması, bir combobox'ta bir seçimin diğerine yansıtıldığı anlamına gelir.

+0

Bilgi için teşekkürler, sorunumla ilgili bir çözüm bulmama izin verin ve geri döneceğim. – Jake

+1

Bu anlamlı değil, değil mi? Veri kaynağı sadece öğelerin listesidir, seçilen öğeyi içermez. Öyleyse, neden bir açılan kutunun seçilen öğesi, liste öğeleri için aynı veri kaynağını kullanarak farklı bir açılan kutunun seçili öğesini belirler? – TheBlastOne

+0

@ TheBlastOne bu durumda veri kaynağının, listenin açılır menüler listesine gireceği verilere karşılık gelir. Yani mantıklı ya da inanıyorum. Diğer veri kaynağı, kullanıcı arayüzüyle etkileşime geçtikçe kullanıcı arayüzünün güncelleneceği bir bellek konumunu ifade eder. – Jake