2016-07-08 6 views
2

Ich habe 2 Comboboxen, die beide die gleiche Datenquelle verwenden. Immer wenn ich eine der Comboboxen ändere, ändert sich die andere auf genau den gleichen Wert.Binding Comboboxes in C# -Fensterformen

Es scheint, dass ich Databinding verwenden muss, um dieses Problem zu lösen.

Ich habe viele Dinge ausprobiert, aber nichts scheint zu funktionieren. Meine Comboboxen heißen comboBox1 und comboBox2. Unten ist der Quellcode, den ich benutze, um Combobox2 unabhängig von ComboBox1 zu machen. Jede Hilfe würde sehr geschätzt werden.

BindingSource bs = new BindingSource(this.claimTypeBindingSource, null); 
    BindingContext bc = new BindingContext(); 
    comboBox2.BindingContext = bc; 
    comboBox2.DataSource = bs.DataSource; 
    comboBox2.DisplayMember = "ClaimType"; 

EDIT ich jetzt gerade habe die Datasource-Zuweisungen outof comboBox1 genommen und unter Verwendung von Code zugeordnet - der Code sieht nun wie folgt.

private void Form1_Activated(object sender, EventArgs e) 
    { 
     BindingSource bs1 = new BindingSource(this.claimTypeBindingSource, null); 
     BindingContext bc1 = new BindingContext(); 
     comboBox1.BindingContext = bc1; 
     comboBox1.DataSource = bs1.DataSource; 
     comboBox1.DisplayMember = "ClaimType"; 

     BindingSource bs2 = new BindingSource(this.claimTypeBindingSource, null); 
     BindingContext bc2 = new BindingContext(); 
     comboBox2.BindingContext = bc2; 
     comboBox2.DataSource = bs2.DataSource; 
     comboBox2.DisplayMember = "ClaimType"; 
    } 

Dies hat das Problem nicht behoben. Wenn ich 1 ComboBox ändere, ändert sich auch die andere.

+0

Können Sie mehr Code bereitstellen - zum Beispiel, wie Sie dieselben Eigenschaften für die erste ComboBox festlegen? –

+0

In diesem Beispiel habe ich gerade 2 ComboBoxes aus der Toolbox auf den Formular-Designer gezogen und den obigen Code zu den Methoden hinzugefügt. In Combobox1 habe ich eine Datenquelle und DisplayMember über die Eigenschaften und ComboBox 2 ist mit dem obigen Code zugewiesen. – David

+0

Ich habe gerade meinen Code geändert - leider hat das nicht geholfen. – David

Antwort

2

Ich habe es gerade gelöst :-) Das funktioniert - ich habe es in mein richtiges Projekt gesteckt und es funktioniert perfekt.

private void Form1_Activated(object sender, EventArgs e) 
    { 
     comboBox1.DataSource = new BindingSource(this.claimTypeBindingSource, null); 
     comboBox1.DisplayMember = "ClaimType"; 

     comboBox2.DataSource = new BindingSource(this.claimTypeBindingSource, null); 
     comboBox2.DisplayMember = "ClaimType"; 
    } 
0

Das ist einfach Code, den ich zwei Combo-Boxen zu füllen und bin mit Wert aus dem ersten Kombinationsfeld ändern nicht den Wert von anderen ändern.

Public Class Form1 

    Dim data As New List(Of Product) 

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

     Dim bs1 As New BindingSource(data, Nothing) 
     Dim bc1 As New BindingContext() 
     ComboBox1.BindingContext = bc1 
     ComboBox1.DataSource = bs1.DataSource 
     ComboBox1.DisplayMember = "ProductName" 

     Dim bs2 As New BindingSource(data, Nothing) 
     Dim bc2 As New BindingContext() 
     ComboBox2.BindingContext = bc2 
     ComboBox2.DataSource = bs2.DataSource 
     ComboBox2.DisplayMember = "ProductName" 

    End Sub 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 

     For intCounter As Integer = 1 To 10 
      data.Add(New Product(intCounter, intCounter.ToString)) 
     Next 

    End Sub 
End Class 


Public Class Product 

    Public Property ProductID As Integer = 0 
    Public Property ProductName As String = String.Empty 

    Public Sub New(ID As Integer, Name As String) 

     Me.ProductID = ID 
     Me.ProductName = Name 
    End Sub 

End Class