2011-03-14 4 views
1

특성 목록을 표시하는 데 사용되는 Infragistics Ultragrid가 있습니다. 때로는 속성이 배열이므로 각 요소에 하위 행을 추가하므로 사용자가 선택적으로 배열 속성을 나타내는 행을 확장하고 모든 요소 값을 볼 수 있습니다. 나는 응용 프로그램을 프로파일 링 한 (9시 초 300 번 호출됩니다 (300 개) 요소를 가지고 걸리는 경우Ultragrid : 서브 행 집합을 프로그래밍 방식으로 추가하는 가장 좋은 방법은 무엇입니까?

var addedRow = mGrid.DisplayLayout.Bands[1].AddNew(); 

을하고이 호출은 경과 시간의 98 %를 가지고있다 :

그래서 각 요소에 대해 내가 사용)

이러한 하위 행을보다 효율적으로 추가 할 수있는 방법이 있습니까?

답변

2

을 사용했다. ultragrid에 대한 행과 하위 집합을 설정해야 할 때마다 linq 및 익명 형식을 사용하여 Propper 컬렉션을 생성하여 데이터 소스를 설정하기 만하면됩니다. 이제는 모든 사람들을 보여주는 gridview를 보여주고 싶은 사람 목록 (id, Name)과 자동차 목록 (id, CarName 및 OwnerId (personId))이 있다고 말하는데, expandabel subrow는 모든 자동차를 제공합니다 개인적인. 단순히 다음을 수행하십시오.

List<Person> persons = GetAllPersons(); 

List<Car> cars = GetAllCars(); 

grid.DataSource = persons.Select(x => new {x.Id, x.Name, Cars = cars.Where(z => z.OwnerId == x.Id).ToList()}).ToList(); 

내가 작성한 익명 유형에 유의하십시오. 이것은 id, Name 및 cars 컬렉션이있는 객체 목록을 생성합니다. 또한 마지막 줄에서 ToList 메서드를 두 번 호출합니다.이 메서드는 ultragrid를 제대로 바인딩하기 위해 필요합니다.

gridview를 편집해야하는 경우 위의 방법은 충분하지 않습니다. ultragrid에는 수정할 기본 데이터 소스가 필요하기 때문에이 방법은 충분하지 않을 것입니다. 하지만 인터넷에서 Linq 컬렉션을 DataTable에 복사 할 수있는 확장 기능을 찾아서 그리드를 편집 할 수 있어야합니다.

저는 위의 방법을 자주 사용했으며 거대한 수집 일지라도 매우 잘 수행됩니다.

희망이 있습니다. 누군가 도움이됩니다.

2

ultraGrid1.BeginUpdate();ultraGrid1.EndUpdate(true);을 사용하여 화면 다시 그리기를 중지 할 수 있습니다. 내 앱에 엄청난 성능 향상을 가져다주었습니다.

또한 내 경우에는 내가 거의> 10,000 행을 채우기, 그래서 내가 대답으로 늦었 알아,하지만 희망 누군가가 어쨌든 내 대답을 사용할 수 있습니다 UltraDataSource

+0

감사합니다. –