2016-07-24 9 views
1

Ich habe drei ComboBoxes in einem WinForm. Um diese Combos mit Daten zu laden, habe ich drei Methoden erstellt. Zwei dieser Verfahren sieht wie folgt aus:Bind List zu ComboBox in C#

private void cmbLoadSubjects(List<Subject> subjects) 
    { 
     BindingSource source = new BindingSource(); 
     source.DataSource = subjects; 

     cmbSubjects.DataSource = source; 
     cmbSubjects.DisplayMember = "name"; 
     cmbSubjects.ValueMember = "id"; 
    } 

private void cmbLoadTeachers(List<Teacher> teachers) 
    { 
     BindingSource source = new BindingSource(); 
     source.DataSource = teachers; 

     cmbTeachers.DataSource = source; 
     cmbTeachers.DisplayMember = "name"; 
     cmbTeachers.ValueMember = "id"; 
    } 

Die Idee ist, den Namen der Person angezeigt werden und den Namen des Lehrers in den Combos.

Combo box showing teachers

Angesichts der Tatsache, dass diese Methoden sehr ähnlich sind, habe ich versucht, eine generische Methode zu erstellen, die alle Combos laden können. So kam ich mit auf den Punkt:

private void cargarCombo<T>(ComboBox combo, List<T> data, string displayMember, string valueMember) 
    { 
     BindingSource source = new BindingSource(); 
     source.DataSource = data; 

     combo.DataSource = source.DataSource; 
     cmbEstadoAsistencia.DisplayMember = displayMember; 
     cmbEstadoAsistencia.ValueMember = valueMember; 
    } 

Wenn ich diese Methode verwenden, um meine Combos zu laden, ist es nur gut arbeitet in einer der Combos. In den anderen Combos wird der typische "WorkspaceName.ClassName" angezeigt. Combo box of teachers when using generic method

Ich versuchte Lehrer Laden und dann versucht Laden Themen in der nur Combo, die gut funktioniert und es zeigte sich, was es angeblich zeigen:

Teacher loaded with generic method Subjects loaded with generic method

Aber wenn ich versuche, das laden Andere Combos mit dieser generischen Methode, trotz der Klasse der Objekte, bekomme ich "Workspace.Teacher", "Workspace.Subject".

Ich verglich die Werte der Eigenschaften der drei Combos, die versuchen, etwas anderes zu finden, um herauszufinden, was dieses Verhalten verursachen könnte, und sie unterscheiden sich nur in ihrem Namen und ihrer Position.

Ich habe versucht, eine neue Combo und Ladelisten verschiedener Klassen von Objekten zu erstellen, aber die Probleme sind immer noch da.

Eine merkwürdige Sache ist, dass alles gut funktioniert, wenn ich die Methoden benutze, die ich Ihnen am Anfang der Frage gezeigt habe. Ich meine, ich könnte einfach diese Methoden anwenden und dieses dumme Problem vergessen, aber ich bin neugierig .. Ich verstehe einfach nicht, warum die generische Methode nur in einer Kombination gut funktioniert.

Antwort

1

ich das Problem gefunden. Das Problem ist, dass ich ein Idiot bin manchmal:

private void cargarCombo<T>(ComboBox combo, List<T> data, string displayMember, string valueMember) 
{ 
    BindingSource source = new BindingSource(); 
    source.DataSource = data; 

    combo.DataSource = source.DataSource; 
    cmbEstadoAsistencia.DisplayMember = displayMember; 
    cmbEstadoAsistencia.ValueMember = valueMember; 
} 

cmbEstadoAsistencia sollte Änderung Combo

Ich war hartzucodieren den Namen eines der Comboboxen sein. Es tut mir leid für die Entsendung Müll :(

0

Ihre Fehler könnte hier sein

combo.DataSource = source.DataSource; 

ändern, dass zu

combo.DataSource = source; 
+0

Vielen Dank für Ihre Antwort. Ich versuchte beide Möglichkeiten vor dem Posten und bekam das gleiche Ergebnis –

+0

Haben Sie dieses generische mit den Daten getestet arbeitet bereits an Combo funktioniert? Versuchte Fach oder Lehrer auf einer Combo funktioniert aber mit generischen? – matiaslauriti

+0

Ja tat ich.Es funktioniert nur gut in einer der drei Combos ... –