0

저는 Entity Framework를 사용합니다. 엔티티 집합을 표준 DataGridView 컨트롤에 바인딩하면 sort-by-click-on-header 기능이 손실됩니다. 나는 심지어 엔티티 집합을 바인딩 소스에 바인딩하려고 시도했지만 결과는 동일합니다.DataGridview에 배정 된 엔터티 집합은 정렬을 비활성화합니다.

또한 코드에서 열을 정렬하려고해도 인터페이스가 구현되지 않는다는 예외가 발생합니다 ... 표준 EF 클래스는 정렬이 불가능합니다 (부머가 될 수 있습니까)? 물론 DataView가 데이터 소스로 제공되는 경우 정렬 작업이 가능합니다.

이 문제를 해결하려면 어떻게해야합니까? 감사.

+0

아무도이 문제에 직면 한 적이 있습니까? – Daniel

답변

0

파티에 늦 았지만 최소한 대답을 게시 할 것이라고 생각했습니다. 작은 호들갑으로이를 달성하는 두 가지 방법이 있습니다 (실제로는 같은 방법이지만 약간 다른 경로).

그래서 우리는 기본 EF 컨텍스트 쿼리를 실행합니다.

var query = context.Projects 
    .Where(x => x.Division == selectedDivision); 

엔티티가 로컬 캐시에로드되도록 쿼리를로드하십시오. 그런 다음 로컬 캐시의 동기화는 바인딩에 DGV의 바인딩 소스를 가리 킵니다

query.Load(); 
projectBindingSource.DataSource = context.Projects.Local.ToBindingList(); 

OR ...이 추적 또는 캐시를 변경할 필요가 내가 원하는하지 않았다 시간/있었다 그래서 다른 작업의 "방법에있어" 추적되지 않은 컬렉션이 필요했습니다.

추적하지 않고 쿼리를 실행하고 결과를 ObservableCollection에로드합니다 (이것이 .Local입니다). ObservableCollection에의 동기화는 바인딩

var locs = new ObservableCollection<Location>(query.AsNoTracking().ToList()); 
locationBindingSource.DataSource = locs.ToBindingList(); 

에 DGV의 바인딩 소스를 가리키는 모든 문자, 숫자 및 부울 열 정렬 헤더 클릭에 대해 사용 가능해야합니다. 정렬하지 않는 항목은 탐색 속성의 열입니다. 소유자 엔터티의 ToString()에서 Owner.FullName 속성을 재정의 했으므로 프로젝트에 소유자 탐색 속성이 있다고 가정합니다. FullName 값을 가진 소유자 열이 표시되지만 이라고 가정합니다. 분류기는 여전히 열 유형을 System.Data.Entity 객체로보고 (표시되는 거품 위로 표시하는 대신) 기본 분류기를 사용하지 않습니다.

+0

흥미로운 것 같습니다. 우리는 DevExpress를 가지고 있기 때문에 곧바로 작동합니다. 그러나 나는 당신의 아이디어를 확실히 체크 할 것입니다. 이 오래된 질문으로 돌아와 줘서 고마워. – Daniel