[英]Bind List to comboBox in C#
我在 WinForm 中有三個組合框。 為了用數據加載這些組合,我創建了三種方法。 其中兩種方法如下所示:
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";
}
這個想法是在組合中顯示主題的名字和老師的名字。
鑒於這些方法非常相似,我嘗試創建一個可以加載所有組合的通用方法。 所以我想出了這個:
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”。
我嘗試加載教師,然后嘗試在唯一可以正常工作的組合中加載主題,它顯示了它應該顯示的內容:
但是,當我嘗試使用此通用方法加載其他組合時,盡管對象屬於類,但我得到“Workspace.Teacher”、“Workspace.Subject”。
我比較了三個組合的屬性值,試圖找到不同的東西,以發現可能導致這種行為的原因,它們僅在名稱和位置上有所不同。
我嘗試創建一個新的組合並加載不同類對象的列表,但問題仍然存在。
一件奇怪的事情是,如果我使用我在問題開始時向您展示的方法,這一切都很好。 我的意思是,我可以利用這些方法而忘記這個愚蠢的問題,但我很好奇.. 我只是不明白為什么通用方法只能在一個組合中正常工作。
我發現了問題。 問題是我有時是個白痴:
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應更改為組合
我正在硬編碼其中一個組合框的名稱。 我很抱歉發布垃圾:(
你的錯誤可能在這里
combo.DataSource = source.DataSource;
將其更改為
combo.DataSource = source;
也許“主題”類需要在其屬性中獲取和設置
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.