2010-04-26 3 views
1

데이터베이스의 레코드 (로그 항목)를 표시하는 DataGridView가 있습니다. 한 번에 존재할 수있는 레코드의 양은 매우 큽니다. DataGridView의 가상 모드 기능을 사용하여 데이터 페이지를 표시하고 주어진 시간에 네트워크를 통해 전송해야하는 데이터의 양을 최소화하고자합니다.DataGridView 가상 모드를 사용하는 데이터 테이블 라이브 디스플레이

데이터 폴링은 문제가되지 않습니다. 한 번에 여러 클라이언트가 실행되며 모두 동일한 네트워크에 있으며 레코드를 볼 수 있습니다. 사용자가 모두 데이터를 폴링하면 네트워크가 매우 느리게 실행됩니다.

데이터는 사용자에게 읽기 전용입니다. 그들은 그것을 볼 수 없으며 단지 그것을 볼 수 있습니다. 데이터베이스에서 업데이트가 발생할 때를 알아야하며 가상 모드를 사용하여 해당 업데이트로 화면을 업데이트해야합니다. 사용자가보고있는 데이터 페이지에 변경 사항이있는 데이터가있는 경우 해당 페이지에서 해당 업데이트를 볼 수 있습니다. 데이터베이스의 데이터는 업데이트되었지만 사용자가보고있는 데이터는 업데이트되지 않은 경우 사용자 화면에서 변경되지 않습니다 (레코드가 추가되거나 제거 된 경우 스크롤 막대 일 수도 있음).

현재 나의 접근 방식은 SQL 프레임 변경 추적을 동기화 프레임 워크와 함께 사용하고 있습니다. 각 클라이언트에는 기본 데이터베이스 서버와 동기화 된 로컬 SQL Server CE 인스턴스와 데이터베이스 파일이 있습니다. 동기화 이벤트의 정보를 사용하여 주 데이터베이스에 변경이 있었는지 확인하고 클라이언트에 동기화되었는지 확인합니다. 한 번에 수천 개의 레코드를 DataGridView에로드 할 수 없기 때문에 여기서 DataGridView 가상 모드를 사용해야합니다. 그렇지 않으면 메모리 사용이 지붕을 통과합니다.

현재 가장 큰 과제는 가상 모드를 사용하여 사용자가 레코드를 위아래로 스크롤 할 수있게함으로써 가상의 모드를 사용하는 방법을 알고 또한 사용자를 부적절하게 간섭하지 않고 즉시 업데이트하도록합니다 . 전에이 문제를 다루는 사람이 있었습니까? 만약 그렇다면, 그들이 그것을 어떻게했는지 볼 수있는 곳이 있습니까? 가상 모드에 대한 MSDN 설명서 및 예제를 살펴 보았습니다. 지금까지, 나는 달성하려고하는 것을하는 방법을 설명하는 문서 및/또는 예제를 사이트에서 발견하지 못했습니다.

답변

1

추가 시작에게

dataGridView1.CellValueNeeded +=new DataGridViewCellValueEventHandler(dataGridView1_CellValueNeeded); 
    dataGridView1.VirtualMode = true; 

사용 u는 업데이 트를

dataGridView1.RowCount = (int)rowscount.TotalCount; 

추가 다음 함수받을 다음 코드를 형성하기 위해 다음

private void dataGridView1_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e) 
      { 
       _cache.LoadPage(e.RowIndex);  
       int rowIndex = e.RowIndex % PageSize;  
       e.Value = datatable.rows[rowIndex][e.ColumnIndex]; 
      } 
관련 문제