2012-07-04 4 views
1

현재 내 응용 프로그램에 대한 "고급"검색 양식을 작성 중입니다. 결과를 표시하기 위해 datagridview을 사용하고 있습니다. 아이디어는 철저히 검색 할 수있는 것입니다 (옵션이 많음). 다른 데이터 소스의 datagradview에 열 추가

현재 나는이 같은 DataGridView를 채우기 : 여기

dgvData.AutoGenerateColumns = false; 

     if (cbbKlant.SelectedItem != null) 
     { 
      dgvData.DataSource = StatistiekManagement.getOpdrachten((klant)cbbKlant.SelectedItem); 

      //ID kolom 
      DataGridViewTextBoxColumn id = new DataGridViewTextBoxColumn(); 
      id.Name = "ID"; 
      id.DataPropertyName = "opdracht_id"; 

      //Plaatsen kolom 
      DataGridViewTextBoxColumn plaatsen = new DataGridViewTextBoxColumn(); 
      plaatsen.Name = "Plaatsen"; 
      plaatsen.DataPropertyName = "aantal_personen"; 

      //Vertrekplaats kolom 
      DataGridViewTextBoxColumn vertrek = new DataGridViewTextBoxColumn(); 
      vertrek.Name = "Vertrek"; 
      vertrek.DataPropertyName = "locatie_id"; 

      this.dgvData.Columns.Add(id); 
      this.dgvData.Columns.Add(plaatsen); 
      this.dgvData.Columns.Add(vertrek); 
     } 

내 문제는 내가 다른 테이블에서 datagridview에 정보를 추가 할 수 있습니다. 예 : 나는 contract이고 계약서는 location입니다. 이 datagridviewlocation을 표시하려면 어떻게해야하나요?

또한 LINQ TO SQL을 사용하여 데이터베이스에서 데이터를 가져옵니다.

감사합니다, 토마스

답변

1

당신은 두 개의 서로 다른 소스에 DataGridView에 바인딩 할 수 없습니다.

두 가지 다른 테이블을 조인하고 SQL 문을 작성하여 데이터 세트를 채우는 것이 해결책입니다. 그런 다음이를 데이터 소스로 사용할 수 있습니다.

+0

: 값을 표시 할 수있는 방법 중 하나는 DataGridView에의 cellformatting 이벤트를 사용할 수 있나요? 나는 linq 코드의 다음 부분을 썼지 만 쿼리를 반환하는 방법을 모르겠다. 'var query = (from dc.opdrachts o.klant == klant o.opdracht_id의 dc.locatie_opdrachts에 join한다. 동등한 lo.opdracht_id 새 선택 {o, lo.locatie}); ' – Schoof

+0

잘 모르겠습니다. 내 LINQ는 녹슨 듯합니다. SQL 연결에 대해 SQL 조인을 호출하고 해당 데이터 집합을 사용할 수 있습니까? – pinkfloydx33

1

위치를 첨부하는 방법에는 여러 가지가 있습니다. 바인딩 된 기본 클래스에 Location을 속성으로 추가 할 수 있다면 가장 쉽습니다. 데이터베이스에 필드가 없어도 바인딩 할 수있는 속성 일뿐입니다. 상속이 옵션이 아니면 캡슐화가 작동 할 수 있습니다.

이외에도 항상 바인딩 된 DataGridview에 바인딩되지 않은 열을 추가 할 수 있습니다. 표시해야 할 값은 원하는 소스에서 올 수 있습니다. 내가 가입 LINQ 문에서 데이터를 반환하려면 어떻게

 //inside initialization void 
     dgvData.CellFormatting+=new DataGridViewCellFormattingEventHandler(dgvData_CellFormatting); 
     dvcol = new DataGridViewTextBoxColumn(); 
     dgvData.Columns.Add(dvcol); 
    } 

    DataGridViewColumn dvcol; 

    void dgvData_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
    { 
     if (dvcol != null && e.RowIndex != -1 && e.ColumnIndex == dvcol.Index)//where Column1 is your combobox column 
     { 
      var rec = (YourRecordTypeSuchAsContract)dgvData.Rows[e.RowIndex].DataBoundItem; 
      e.Value = ""; //get description based on the rec 
     } 
    } 
+0

감사합니다. 바운스 된베이스 클래스에 얼마나 정확하게 속성을 추가합니까? LINQ가 모든 수업을 만들도록했습니다. – Schoof

+0

자동 생성 된 LINQ 클래스를 확장하는 것은 실제로 구현하는 부분 선언 때문에 매우 쉽습니다. 뒤에있는 코드 (디자이너에서 테이블을 마우스 오른쪽 버튼으로 클릭하고 '코드보기'를 클릭)로 이동하면 속성을 추가 할 수있는 부분 클래스가 표시됩니다. (해당 속성에 열 속성이 없으면 데이터베이스 스키마의 일부로 간주되지 않습니다. –

+0

몇 가지 링크 : 간단한 예 : http://www.dotnetguy.co.uk/post/2009/05/13/custom-properties-on-a-linq-2-sql-model/ 그리고 여기 더 긴 튜토리얼 : http://www.sexyselect.net/blog/post/2011/06/24/Extending-Linq-2-Sql-Classes-adding-custom-properties –

관련 문제