2009-09-03 95 views
0

最佳功能性代碼有多遠? 我有兩個組合框,所以第一個是關於選擇公司,第二個是關於選擇分支機構的關係。LINQ和ComboBox DataSource問題

我注意到,我可以與LINQ過濾。凡填寫數據源的唯一途徑就是在這條路上,也許我錯了,請花點時間看看爲下面的代碼片段:

private void cboCompany_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      var _index = ((ComboBox)sender).SelectedIndex; 
      using (DB db = new DB()) 
      { 
       var su = (from s in db.Branchs select s); 

       if (cboCompany.SelectedIndex == 0) 
       { 
        cboBranch.DataSource = su.Where(x => x.codeCompany == 1).Select(x => x.name).ToList(); 
       } 
       else if (cboCompany.SelectedIndex == 1) 
       { 
        cboBranch.DataSource = su.Where(x => x.codeCompany == 2).Select(x => x.name).ToList(); 
       } 

       cboBranch.BindingContext = this.BindingContext; 
       cboBranch.DisplayMember = "name"; 
       cboBranch.SelectedIndex = 0; 
      } 
     } 

先謝謝了!

回答

2

而不是手工編碼這一點,我會做數據綁定在這做了我。特別是,它可以設置這樣的:

  • 讓這個你Company類有一個屬性來獲取所有相關聯的分支 - 例如Company.Branches。如果您使用LINQ to SQL或實體框架,那麼應該有一個。
  • 有兩臺BindingSource S,bsCompaniesbsBranches
  • 設置cboCompany.DataSourcebsCompanies,並cboBranch.DataSourcebsBranches
  • 設置bsCompanies.DataSource到收集/包含公司數據集。
  • 設置bsBranches.DataSourceBranches根據bsCompanies(如果您的集合是強類型的,表單設計人員應該讓您在完成上一步後執行此操作)。

現在每當用戶在第一個組合中選擇一個不同的公司時,公司綁定源中的當前項目將會改變。這將導致第二個綁定來源的綁定重新評估,並將新選擇的公司的分支列表設置爲第二個組合的來源。

+0

是的,順便說一句,如果分支是一個可選的選擇,我的意思是你需要檢查分支組合附近啓用此控件並選擇是否需要,在此操作綁定源失敗或不? – 2009-09-03 17:59:46

+0

爲什麼會失敗?它仍然會將公司分支給公司,當然,這只是該用戶將無法與分支機構組合框進行交互。 – 2009-09-03 18:44:01

+0

我明白了,謝謝你的信息,你能提供有關先進BindingSources更多的鏈接像使用通用或複雜類型 – 2009-09-03 19:23:57