2013-11-24 24 views
1

我正在構建一個小型應用程序,接受作爲描述學生和顧問的輸入信息。我爲每個類創建了一個類,一旦輸入信息,兩個對象都存儲在單獨的列表框中。問題是,我必須將學生課的實例鏈接到Adviser課的實例,我不知道哪裏可以開始。每個學生只能有1名顧問,但顧問可以與許多學生一起工作。有沒有辦法將兩個單獨的列表框中的兩個值鏈接在一起?

我在想,我必須爲顧問創建一個ID#,因爲我現在只收集來自他們的字符串信息,並且使用數字可能更容易。我不熟悉面向對象編程。我應該從哪裏開始?

+0

你已經設置了你的列表框的數據源?只是試圖結合信息? – paqogomez

+0

當應用程序不再運行時,數據不需要存儲,所以我只是試圖將這兩個值臨時關聯起來。一旦描述了每個對象的所有信息(名字,姓氏,專業,部門),它們就存儲在一個列表框中。一旦存儲信息,我所要做的就是能夠在列表框中選擇一個給定的值,並將其所有特徵顯示在表單的另一部分中。除了將多名學生分配給一名顧問,然後根據需要顯示這些信息之外,相當簡單明瞭。 – cjharty

+0

爲什麼要將學生分配給顧問而不存儲該信息? – paqogomez

回答

1

Linq將幫助你一起加入你的課程。

private void ListBox1_SelectedValueChanged(object sender, EventArgs e) 
    { 
     if (ListBox1.SelectedIndex != -1) 
     { 
      var joined = (from s in Students 
          join a in Advisers on s.AdvisorsID equals a.AdvisorsID 
          where a.AdvisorsID == ((Advisor)ListBox1.SelectedItem).AdvisorID 
          select new {a, s}); 
     } 
    } 

這會給你一個對象,它可以遍歷或作爲UI目標數據源使用。

但是,您需要一些共同字段才能將它們連接在一起。使用@Ryans關於關係數據的回答對於從/向數據庫提取信息很有幫助。

編輯: 我剛剛在標題中注意到Listbox。要做到這一點的customary way是有一個具有ID和文本值的數據源。

設置數據源:

listbox.DataSource = Students; 

的ID設置爲ListBox的ValueMember屬性:

listbox.ValueMember = "StudentID"; 

然後分別顯示值:

listbox.DisplayMember = "StudentName"; 

然後你就可以使用上面的LINQ代碼從結構中拉出正確的代碼。

+0

感謝您向我介紹Linq,這看起來像我必須做的。 – cjharty

+0

@cjharty太好了,讓我知道如果有什麼不清楚的。請記住標記你的答案。 (投票數下方的複選框) – paqogomez

1

你正走在正確的道路上。我假設這些對象有一天會存儲在某種持久存儲中(如數據庫),對吧?

如果是這樣,則爲每個對象添加一個主鍵。說你的學生對象的StudentID和你的Advisers的AdviserID。然後,將AdviserID列添加到學生對象。這將以N..1的關係將學生映射到顧問。

如果這些對象永遠不會被保存到數據庫中,那麼只需將一組學生添加到您的Adviser對象。例如,您的顧問對象可能具有以下對象屬性:

public List<Student> Students { get; set; } 

是否有意義?

+0

他們不會被存儲在數據庫中,他們只需要是活躍​​的表單正在運行。我正在考慮在表單中使用列表來存儲學生的所有實例,並且爲所有顧問實例存儲所有實例。是否有辦法在列表中創建一個子列表,以便將特定的學生分配給特定的顧問?或者,我最好在學生和顧問課程本身內製作一份完全獨立的清單? – cjharty

+2

我會在表格中維護一個顧問列表,並將上面提到的名單學生資產添加到顧問類中。這將使綁定界面元素更容易與Adviser的學生集合。 或者,你可以維護一個學生名單,一個顧問名單和一個字典<顧問,名單>映射顧問到學生名單。 雖然我會建議第一個選項。 –

+0

聽起來不錯。謝謝! – cjharty

相關問題