2016-03-21 23 views
0

Ben ComboBox Değer MemberC# Combobox çift veri bağlama - EntityFramework değerine dayalı seçme madde

ComboBox DataSource sınıf table1 bağlamak Varlık Çerçeve 6. Amacım kullanarak, birkaç masa var olduğunu:

ComboBoxBasicDB[] statType = new ComboBoxBasicDB[] { 
      new ComboBoxBasicDB { Text = "A1", Value = 0 }, 
      new ComboBoxBasicDB { Text = "A2", Value = 1 }, 
      new ComboBoxBasicDB { Text = "A3", Value = 2 }, 
      new ComboBoxBasicDB { Text = "A4", Value = 4 }, 
      new ComboBoxBasicDB { Text = "B12", Value = 12 }, 
      new ComboBoxBasicDB { Text = "B13", Value = 13 }, 
      new ComboBoxBasicDB { Text = "B14", Value = 14 } 
     }; 

statBS.DataSource = statType; // statBS == BindingSource, configured throught VS designer, comboBox.DataSource = statBS, comboBox.ValueMember = Value, comboBox.DisplayMember = Text 

table1, ex denen özelliği içerir.

textBox.DataBindings.Add("Text", binding, "Name"); 
: bunlardan birini içeren Value1 (0, 1, 2, 4, 12, 13, 14)

Ne yapmaya çalışıyorum DB satırdan yüklemek ve TextBox böyle bir şey kullanmaktır

comboBox.DataBindings.Add("SelectedValue", binding, "Value1"); 

ama çalışmıyor, hiçbir şey sorgusunun ardından seçilir: çalışır

mükemmel

böyle bir şey denedik. Metin kutusu bağlama başarıyla

ben Selectedındex kullanılan ama bir problem var gidiyor ve StatType 7 ürün olduğundan yani 7'nin üstünde bir değerdir değil Sana yapmaya çalışıyorum anlamak umut 14.

:/ Ben bu comboBox.DataManager ama onun özel

yapabileceğini düşündüm Herhangi bir fikir için teşekkürler.

+0

denedin onun DifferentTextColor olarak etkin eğer özel DrawItem [bu cevabı yoktur SO] (http://stackoverflow.com/a/10015963/4677585) – wonderbell

+0

dediğim gibi: comboBox.DataBindings.Add ("SelectedValue", binding, "Value1"); Çalışmıyor:/ Düğme işlemi ile comboBox.SelectedValue = 14; – user1085907

cevap

0

Yani çözüm, özel uygulama, söz DataBindings SelectedItemValue için SelectedValue değiştirmek içinde

Uygulama:

public class ComboBoxBasic : ComboBox 
{ 
    bool diffTextColor = false; 

    public ComboBoxBasic() 
    { 

    } 

    public object SelectedItemValue 
    { 
     get 
     { 
      return (SelectedItem as ComboBoxBasicDB).Value; 
     } 

     set 
     { 
      for(int i = 0; i < Items.Count; i++) 
      { 
       ComboBoxBasicDB item = Items[i] as ComboBoxBasicDB; 

       if(item.Value.ToString() == value.ToString()) 
       { 
        SelectedIndex = i; 

        break; 
       } 
      } 
     } 
    } 

    public bool DifferentTextColor 
    { 
     get { return diffTextColor; } 

     set 
     { 
      diffTextColor = value; 

      if (diffTextColor) 
      { 
       DrawItem += ComboBoxBasic_DrawItem; 
       DrawMode = DrawMode.OwnerDrawFixed; 
      } 
      else 
       DrawItem -= ComboBoxBasic_DrawItem; 
     } 
    } 

    void ComboBoxBasic_DrawItem(object sender, DrawItemEventArgs e) 
    { 
     e.DrawBackground(); 

     if (e.State == DrawItemState.Focus) 
      e.DrawFocusRectangle(); 

     Brush brush = new SolidBrush((sender as Control).ForeColor); 

     ComboBoxBasicDB item = (sender as ComboBoxBasic).Items[e.Index] as ComboBoxBasicDB; 

     if (item.ForeColor != Brushes.Black) 
      brush = item.ForeColor; 

     e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; 
     e.Graphics.DrawString(item.Text, (sender as Control).Font, brush, e.Bounds.X, e.Bounds.Y); 
    } 
} 

Ayrıca