2016-07-24 54 views
1

我在WinForm中有三個組合框。要用數據加載這些組合,我創建了三種方法。 兩種這些方法看起來是這樣的:在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"; 
    } 

的想法是顯示對象的名稱和連擊老師的名字。

Combo box showing teachers

鑑於這些方法都非常相似,我試圖創建一個可加載所有的連擊的通用方法。所以,我想出了這個:

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; 
    } 

如果我用這個方法來加載我的連擊,它只有在連擊的一個正常工作。在其他組合中,它顯示了典型的「WorkspaceName.ClassName」。 Combo box of teachers when using generic method

我試圖加載老師,然後試圖加載科目在正常工作的唯一組合,它顯示它應該顯示:

Teacher loaded with generic method Subjects loaded with generic method

但是,當我嘗試加載其他組合使用這種通用方法,儘管類的對象,我得到「Workspace.Teacher」,「Workspace.Subject」。

我比較了三個組合的屬性值,試圖找到不同的東西,以便發現可能導致此行爲的因素,並且它們只在名稱和位置上有所不同。

我試着創建一個新的組合並加載不同類別的對象列表,但問題仍然存在。

一個好奇的是,如果我使用我在問題開始時顯示給你的方法,它一切正常。我的意思是,我可以利用這些方法並忘記這個愚蠢的問題,但我很好奇......我只是不明白爲什麼通用方法只能在一個組合中正常工作。

回答

1

我發現這個問題。問題是,我有時白癡:

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應該是組合

我被硬編碼組合框的一個名稱的變化。 我很抱歉張貼垃圾:(

0

你的錯誤可能是這裏

combo.DataSource = source.DataSource; 

改變,要

combo.DataSource = source; 
+0

感謝您的回答。我試過兩種方式,然後發佈,並得到了相同的結果 –

+0

你測試這個通用與數據已經工作組合正在工作嗎?試過的主題或老師在組合上工作但是通用? – matiaslauriti

+0

是的,我做了,它只能在三個組合中的一箇中正常工作... –