2016-04-06 9 views
0

Açılan kutularımı bir sözlük kullanarak bir ciltleme kaynağıyla dolduruyorum, ancak bu, listenin en üstünde varsayılan olarak görünür hale gelir.Birleşik giriş kutusunu görünür bir metni ciltleme kaynağıyla doldurduktan sonra hiçbir şey olarak ayarlayın

Kullanıcı açılan menüden bir seçenek seçtiğinde (SelectedIndexChanged), açılan kutu açıldıktan sonra açılan kutunun görüntülenmesini istemiyorum. Bu yüzden ihtiyaç duydukları bir seçenek ile, zaten seçilmiş gibi görünseler bile seçmek zorundalar.

Sözlük oluşturma:

 public Dictionary<int, string> Get_List_of_SchemesID() 
     { 
      Dictionary<int, string> comboSource = new Dictionary<int, string>(); 

      using (SqlConnection cnn = new SqlConnection(connectionString)) 
      { 
       cnn.Open(); 
       string query = "SELECT [idGMRScheme],[SchemeName] FROM [DBA_Admin].[dbo].[GMR_Schemes]"; 

       using (SqlCommand command = new SqlCommand(query, cnn)) 
       using (SqlDataReader reader = command.ExecuteReader()) 
        while (reader.Read()) 
        { 
         comboSource.Add((int)reader["idGMRScheme"], (string)reader["SchemeName"]); 
        } 
      } 
      return comboSource; 
     } 

Combo nüfus:

public void Populate_SchemesID_Combolists(Dictionary<int, string> comboSource) 
    { 
     cb_Schemes.DataSource = new BindingSource(comboSource, null); 
     cb_Schemes.ValueMember = "Key"; 
     cb_Schemes.DisplayMember = "Value"; 
    } 

cevap

0

İki farklı yaklaşım görüyorum.

İlk

değiştirin combobox yeni bir öğe eklemek için bu yöntemi:

public void Populate_SchemesID_Combolists(Dictionary<int, string> comboSource) 
{ 
    comboSource.Add(0, ""); //To be the first item displayed 
    // or 
    comboSource.Add(0, "Select the Scheme"); // To be default 
    // maybe you'll need to order by the key asc. 

    cb_Schemes.DataSource = new BindingSource(comboSource, null); 
    cb_Schemes.ValueMember = "Key"; 
    cb_Schemes.DisplayMember = "Value"; 
} 

İkinci

public void Populate_SchemesID_Combolists(Dictionary<int, string> comboSource) 
{ 
    cb_Schemes.DataSource = new BindingSource(comboSource, null); 
    cb_Schemes.ValueMember = "Key"; 
    cb_Schemes.DisplayMember = "Value"; 

    cb_Schemes.Text = ""; 
    //or 
    cb_Schemes.Text = "Select the Scheme"; 
} 

Not: İki yöntemleri için sen' Doğru iteğin seçilip seçilmediğini kontrol etmeliyim m gibi combobox seçilen öğe ile bir şey yapmadan önce:

if (cb_Schemes.SelectedItem.ToString() != "Select the Scheme" || cb_Schemes.SelectedItem.ToString() != "") 
{ 
    //do anything 
} 

Ben anladınız umarım.

+0

İlk yöntem, son öğe olarak görünen yeni öğeyi ve soruyu sormadan önce denediğim .text yöntemiyle sonuçlanır, ancak değer/görüntüleyici üyesini kullanırken hiçbir şey yapmaz gibi görünür. – Vereonix

+0

Anahtarla siparişi denediniz mi? –

+0

Yapabileceğinizi bilmiyordum, nasıl yapılacağını bulamıyorum, çünkü combobox için bir .order veya benzeri bir işlev göremiyorum. Ama bu mükemmel bir çözüm olabilirdi. – Vereonix

1
Sen -1 olarak combo en Selectedındex ayarlamayı deneyebilirsiniz

:

cb_Schemes.SelectedIndex = -1;

+0

Bu hiç bir şey yapmıyor gibi görünüyor, varsayılan olarak dizin 1'e ayarlanmış gibi görünüyor, ancak görsel olarak listede gösterilen ilk öğe. – Vereonix

+0

Hmm ... Bu garip. SelectedIndex'i ayarlamadan bu senaryoyu test ettim ve ilk öğeyi gösterdim. -1'e ayarladıktan sonra, ComboBox herhangi bir değer göstermiyor. Ayrıca hata ayıklama, SelectedIndex'in 0'dan -1'e değiştirildiğini gösterdi. SelectedIndex'in -1'e ayarladıktan sonra 0'a ayarlanmadığından emin misiniz? – DimitarD

+0

Bunu bir düğmeden çalıştırmak üzere ayarlıyorum, öğeleri korurken açılır listeyi görünecek şekilde ayarlayabilirsiniz. Ancak, birleşik yüklemeleri yükte dolduran işlevim var ve orada çalışmıyor veya üzerine yazılıyor gibi görünüyor. – Vereonix