2009-03-02 4 views
4

저는 C# 프로젝트를 매우 간단하게 작업하고 있습니다.매분마다 C#에서 datagridview를 업데이트합니까

상태 상자, 두 개의 버튼 및 dataGridView가 있습니다.

Form이로드되면 dataGridView가 올바르게 채워집니다.

나는 데이터베이스에 변경 사항을 반영하기 위해 매 45 초마다 해당 테이블을 업데이트합니다.

나는 이것을 달성하기위한 기법에 대한 제안을 찾고있다. 나는 명확한 정보를 찾고 있었지만 다소 부족한 것으로 보인다.

답변

7
  1. 가 폼에 Timer 컨트롤을 추가합니다.
  2. 어느 코드에서 어딘가에 폼 디자이너에서 True에 타이머의 Enabled 속성을 설정하거나 (값이 밀리 초를 나타냅니다) 45000에 그 Interval 속성을 설정 (이 구성 요소 범주에 있어요).
  3. 타이머의 Tick 이벤트에 대한 처리기를 추가 Tick 핸들러 내부
  4. (당신은 타이머를 두 번 클릭하여 얻을 수) 업데이트하여 dataGridView

핸들러는 다음과 같이 표시됩니다

private void timer1_Tick(object sender, EventArgs e) 
{ 
    // Update DataGridView 
} 

어떤 이유로 업데이트를 일시 중지해야 할 경우 timer1.Stop()으로 전화하여 타이머 실행을 중지하고 timer1.Start()을 사용하여 다시 시작할 수 있습니다.

1

타이머 컨트롤을 사용하여 필요한 특정 증가분으로 업데이트를 수행하십시오.

+0

참고 : 타이머 컨트롤의 증가분은 속성에서 설정할 수 있습니다. 그런 다음 컨트롤을 두 번 클릭하면 필요한 특정 이벤트 처리기에 액세스 할 수 있습니다. – TheTXI

1

매 45 초마다 발생하는 Timer을 만들고 이벤트 처리기에서 UI를 업데이트 할 수 있습니다.

5

다른 사람들과 마찬가지로, 타이머를 사용하여 데이터베이스를 다시 쿼리하십시오. 추가하려는 유일한 점은 데이터베이스를 다시 쿼리 할 때 DataGridView의 데이터 소스를 새 테이블로 설정하지 않는 것입니다. 오히려 기존 테이블과 병합하십시오. 그 이유는 사용자가 특정 행을 보는 것과 같이 그리드 중간에있는 경우 DataSource를 새 테이블로 재설정하면 전체 표가 새로 고쳐지기 때문에 자리를 잃을 수 있기 때문입니다. 지옥처럼 짜증나! 그래도 을 병합하면이 나오지만 사용자에게는 아무런 문제가 없습니다. 병합 방법은 테이블에 기본 키를 가질 필요가 있다는 것입니다 사용할 때

DataTable.Merge

한 가지

는 알고 있어야합니다. DataTable 자체에 기본 키가 있는지 다시 확인하십시오. 항상 데이터베이스에서 다시 가져 오는 것은 아닙니다. 당신은 같은 것을 할 필요가 있습니다 :

table.PrimaryKey = new DataColumn[] {table.Columns["ID"]}; 
+0

@BFree : 좋은 팁입니다. ASP.NET의 GridView로도 변환 될 수 있습니까? – TheTXI

+0

저는 ASP.NET에 대한 전문가는 아니지만 제 제한적인 이해로 인해 데이터베이스에 다시 게시하기 위해 다시 게시해야하지 않습니까? 어쨌든 그들이 자리를 잃을까요? 어쩌면 다시 게시하기 전에 현재 선택한 행을 캐싱하고 사용자에 대해 해당 행을 다시 선택할 수 있습니다 ... 확실하지 않습니다 ... – BFree

+0

@BFree : 포스트 백을해야하는데,이게 숨겨진 보석 일종의 GridView가 맨 위로 롤백되는 것을 방지합니다. MaintainScrollPosition을 알았지 만, 스크롤 할 수있는 div에서는 잘 동작하지 않습니다. – TheTXI

0

당신은 내가 타이머 이벤트 처리기에서 다시 datagridview를 바인딩해야한다는 것을 의미합니까?

관련 문제