2009-07-27 7 views
0

가상 모드 데이터 격자에서 행 목록을 검색 할 때 예외가 계속 발생합니다 (아래 참조). 이는 화면에 표시 할 수있는 것보다 많은 행이있을 때만 발생합니다. 매번 발생하지는 않습니다. 가상 모드와 관련하여 내가 놓친 것이 있습니까?가상 모드의 DataGrid에서 행을 검색 할 때 예외가 발생했습니다.

업데이트> 아래 이미지는 문제를 나타내며 색인이 목록 범위 밖에 있습니다. 이것에 대한 이유는 내가 10 항목을 가지고 있고 그들이 필요하지 않기 때문에 나는 5를 숨기고 내가 볼 수있는 5에 어떤 코드를 실행하고 싶다, 지금 5 항목이 있지만 5-9 사이의 어쩌면 어떤 인덱스가있는 것입니다. 다시 색인을 생성 할 수 있습니까? 보이는 코드 5에서 코드를 실행했을 때 숨겨진 코드 5를 보여주기 때문에 이것을 숨기고 싶지는 않습니다. 코드가 모두 보이면 다시 색인해야합니다. 많은 감사합니다.

alt text http://i28.tinypic.com/23iyp95.png

+0

내가 실패한 행에 대해 널 (null)로 값을 보여주는 3 그림을 추가 한 다른 기사를 귀하의 데이터 그리드 디스플레이

를 참조 느려질 수 있습니다, 이것이 true 또는 다른 행에 대해서는 false입니다. –

+0

나는 새 사진이 문제를 분명하게 보여줌으로써 오래된 사진을 삭제했다. 나는 다시 색인을 달아야한다. (나는 생각한다) 어떻게하면 좋을까? 감사합니다 –

+0

이 모든 도움을 많이 주시면 감사하겠습니다. 감사합니다 –

답변

0

난 단지 DataGridView에 가상 모드를 사용했지만, 가상 모드에서는 데이터를 직접 저장하고 데이터 그리드가 렌더링에 필요로 할 때 그것을 제공하기로되어있다. DataGrid는 뷰를 채우고 성능상의 이유로 재사용하는 데 필요한 최소한의 항목 만 생성한다고 가정합니다.

0

이것은 일종의 스레딩 문제와 같습니다. BackgroundWorker 나 비슷한 것을 사용하여 _items 변수를 채우고 있습니까? 그것은 당신이 그것 위에 반복하면서 _items의 사물의 숫자가 바뀌고있는 것처럼 보입니다. 아마도

어떤 모든 코드는 다음과 _items 다루는 서라운드 시도 할 수 :

lock (_items) 
{ 
    // your code 
} 

을 다른 방법으로 이러한 기능의 탈옥과 인구/변경 코드가 여전히 실행중인 경우 (null를 돌려 어떤 종류를 사용 부울 형 센티넬 변수).

0

어떻게 데이터 바인딩을 설정 했습니까?

DataGrid를 거치지 않고 기본 데이터 집합에 대해 작업 할 수 있습니까?

+0

안녕하세요 쉬라즈, 그 긴 이야기지만 이상적으로 내가 데이터 그릿에 이미 가지고있는 데이터를 사용해야합니다. –

0

DataGridView의 가상 모드 제한을 알고 있어야합니다. 그것의 낮은 메모리 소비 기능을 가정에도 불구하고 (가시 행만 데이터베이스에서로드됩니다); 각 행에 자체 인스턴스가 있습니다. 각 DataGridView 행의 크기를 조정하려고하면 행의 크기를 서로 독립적으로 설정할 수 있으므로 각 행의 정보 (예 : RowHeight)를 자체 메모리에 저장해야합니다.

RowCount를 설정하면 RowCount에 지정된 행으로부터 행의 n 개의 행을 인스턴스화합니다. 따라서 DataGridView의 가상 모드의 기본 목적 중 하나 인 메모리 부족을 해결합니다. 너무 많은 메모리 소비가 나의 기사 여기 http://www.codeproject.com/KB/grid/DataGridView_Billion_Rows.aspxhttp://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/243a81e7-909b-4c8e-9d28-6114248cf66e

관련 문제