문제

런타임에 DataSource를 설정 한 DeVexpress 그리드 (Devexpress.xtragrid.gridControl 8.2)가 있습니다.

private DataContext db = new DataContext("connection string");
gridControl.DataSource = from t in db.sometable
                          select new
                          {
                              Field1 = t.Name,
                              Field2 = t.Email,
                              Field3 = t.City
                          };

이것은 뷰가 설계 시간에 데이터가 어떻게 보일지 전혀 모른다는 것을 의미합니다. LINQ 쿼리를 DataSource로 설정하는 것을 좋아하지만 설계 시간에 대한보기가 어떻게 보일지 지정하고 싶습니다.

  • 이 쿼리를 사용할 것이라는 견해를 알 수있는 방법이 있습니까?
  • 최상의 솔루션은이 쿼리에서 반환되는 내용의 내용을 유지하기위한 작은 객체를 만드는 것입니까?
도움이 되었습니까?

해결책

DeVexPress 그리드가 데이터 소스의 열을 자동으로 선택할 수 있도록 LINQ 쿼리의 리턴 유형에 대한 클래스를 정의해야합니다. 설계 시간에 Winform 바인딩 엔진은 소스가 데이터 소스의 속성, 유형 등을 자동으로 발견하기 위해 소스가 구현되면 반사 또는 iCustomtypedescriptor를 사용합니다. DeVexpress 그리드는이 기본 바인딩 메커니즘을 사용하고 속성 정보에 따라 설계 시간에 자동으로 열을 생성합니다. 그러나 귀하의 경우, LINQ 쿼리에서 설계 시간에 알려지지 않았거나 사용할 수없는 익명 유형을 생성합니다. 따라서 DeVexress 그리드는 열을 자동으로 생성 할 수 없습니다. @dennis가 언급했듯이 디자이너의 그리드에 열을 수동으로 추가 할 수 있습니다. 열에서 'FieldName'이 데이터 소스의 속성 이름과 일치하는지 확인해야합니다.

클래스를 사용하는 경우 InotifyPropertyChanged를 구현하여 그리드가 데이터 소스의 데이터 변경을 알리도록 할 수도 있습니다.

다른 팁

IIRC, XTRAGRID는 데이터 소스가 자동 생성 열을 위해 데이터베이닝 인터페이스 (예 : iBindingList (t))를 구현해야하며 항목은 inotifyPropertyChanged를 구현해야합니다.

이를 염두에두고 : 열의 필드 이름 속성을 설정하는 한 디자인 시간에 또는 런타임에 코드를 통해 마법사를 통해 열을 생성하는 경우 해당 이름의 속성과 함께 데이터 소스의 데이터를 표시합니다.

메모:

  • 나는 그것이 공개 변수에 구속되지 않는다는 것을 알았 기 때문에 그것이 자동이든 아니든 재산이어야한다고 생각합니다.
  • 속성에는 무언가를 할당해야합니다 (기본 또는 기타).
  • 항목에 대한 매개 변수가없는 생성자가 있어야합니다.

필드는 설계 시간에 알려져 있습니다 (Field1, Field2, Field3).

에 따르면 DeVexpress 당신이 사용할 수있는 IList, IListSource, ITypedList 또는 IBindingList. 그것들의 차이점은 새 행을 추가 할 수 있는지 또는 변경 사항이 제어를 개선 할 것인지 여부입니다.

따라서 tolist ()를 사용할 수 있습니다.

private DataContext db = new DataContext("connection string");
gridControl.DataSource = (from t in db.sometable
                         select new
                         {
                             Field1 = t.Name,
                             Field2 = t.Email,
                             Field3 = t.City
                         }).ToList();

메모: DeVexpress 10.1을 사용하여 테스트했지만 사용하는 경우 Winforms 바인딩 그런 다음 여전히 작동해야합니다 MSDN.

Devexpress 그리드와 함께 일하지는 않았지만 .NET DataGridView로 많은 작업을 수행했습니다.

DeVexpress 그리드는 자동으로 열을 생성하는 .NET DataGridView와 동일한 기능을 갖추고 있습니까?

그렇다면 쿼리에있는 모든 필드를 표시하고 Field1, Field2 및 Field3 (예제 코드)을 열 이름으로 사용합니다.

또는 자동 생성 열 기능을 끄고 설계 시간에 열을 추가하십시오. 그들이 당신의 쿼리 반환과 일치하는 한 잘 작동해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top