2009-09-03 4 views
0

최상의 기능성을위한 코드는 어느 정도입니까? 두 개의 ComboBox가 있으므로 첫 번째는 회사를 선택하는 것과 관련이 있고 두 번째는 ComboBox와 관련하여 지사를 선택하는 것입니다. 다음 코드를 살펴 위해LINQ 및 ComboBox 데이터 소스 문제

은 내가 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 또는 Entity Framework를 사용하는 경우 이미 하나가 있어야합니다.
  • 두 개의 BindingSource, bsCompaniesbsBranches이 있습니다.
  • 는 모음/회사가 포함 된 데이터 집합으로 설정 bsBranches
  • bsCompanies.DataSourcebsCompanies-cboCompany.DataSourcecboBranch.DataSource을 설정합니다.
  • bsBranches.DataSource부터 Branches까지를 bsCompanies (사용자가 이전에 수행 한 작업을 수행 한 후에 양식 디자이너가 강력하게 입력 한 경우 양식 디자이너가이를 수행해야 함)으로 설정하십시오.

사용자가 첫 번째 콤보에서 다른 회사를 선택하면 회사 바인딩 소스의 현재 항목이 변경됩니다. 이로 인해 두 번째 바인딩 원본에 대한 바인딩이 다시 평가되고 새로 선택된 회사의 분기 목록이 두 번째 콤보의 원본으로 설정됩니다.

+0

브리핑이 선택 사항 인 경우 어떻게됩니까?이 컨트롤을 사용하려면 지사 콤보 근처를 확인하고 원하는 경우이 작업에서 바인딩을 선택해야합니다. 출처는 실패 했습니까? –

+0

왜 실패할까요? 그것은 여전히 ​​기업들에게 브랜치를 가져올 것이지만, 물론 사용자는 브랜치 콤보 박스와 상호 작용할 수 없다. –

+0

정보를 주셔서 감사합니다. 일반 또는 복합 유형을 사용하는 것과 같은 고급 BindingSources에 대한 링크를 더 많이 제공 할 수 있습니까? –