2013-04-02 2 views
3

아래의 코드를 사용하여 Timmer와의 내 응용 프로그램에서 datagridview를 업데이트합니다. Timmer는 1 초마다 실행되며 화면이 계속 깜박입니다. 어떻게 그 시간에 플래시로 바꿀 수 있습니까? 또는 다른 방법으로 DataGridview를 업데이트 할 수 있습니까?Dataagridview를 업데이트하는 가장 좋은 방법은 무엇입니까?

 SqlConnection mySqlConnection = new SqlConnection(SQLCONN); 
     mySqlConnection.Open(); 

     SqlDataAdapter addapter = new SqlDataAdapter(); 
     DataTable dt = new DataTable("SSReportAmalgamate"); 
     SqlCommand cmd = mySqlConnection.CreateCommand(); 

     cmd.CommandText = "EXEC App_GetDATA " + "@acc" + "," + "@selecttype"; 
     cmd.Parameters.Add("@acc", SqlDbType.Char).Value = acc; 
     cmd.Parameters.Add("@selecttype", SqlDbType.Char).Value = type; 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.CommandType = CommandType.Text; 
     cmd.Connection = mySqlConnection; 
     addapter.SelectCommand = cmd; 

     addapter.Fill(dt); 
     dataGridView1.DataSource = dt; 

     mySqlConnection.Close(); 

답변

0

한 행동의 과정, 윈폼를 사용하면 가정은 double buffer로 제어를 설정하는 것입니다.

control.DoubleBuffered = true; 

또는 디자인보기의 속성 창에서 설정할 수 있습니다. 양식 자체도 IIRC 속성을가집니다.

그리고이 ...

[...] 줄이거 나 표시면의 부분 프로그레시브 재기록에 의해 야기되는 플리커를 제거 할 수있다. 버퍼링 된 그래픽은 업데이트 된 그래픽 데이터가 먼저 버퍼에 쓰여지도록 이 필요합니다. 그러면 그래픽 버퍼에있는 데이터 이 디스플레이 표면 메모리에 빠르게 쓰여집니다. 디스플레이 된 그래픽 메모리의 상대적으로 빠른 스위치 은 일반적으로 발생할 수있는 깜박임을 감소시킵니다.

+0

동일합니다. 사실, 전체 화면이 깜박 거리지 않고 응용 프로그램을 실행하는 동안 datagridview 부분 일 뿐이며 타이머가 everyseond로 설정되어 있기 때문입니다. DataGridview에서는 셀의 색을 데이터 값에 따라 바꿉니다. 그래서 일단 datagridview 바인드하면 원래 셀 색을 새로운 셀 색으로 변경합니다. – Jay

1

문제는 데이터가 변경되지 않은 경우에도 양식을 업데이트한다는 것입니다. 대신 SQL Server에서 이벤트를 청취하십시오. using a SqlDependency 새 데이터가있는 경우 (물론 데이터가 자주 변경되지 않는 경우).

+0

응용 프로그램에 "CREATE"에 대한 충분한 db 권한이 없으므로 SqlDependency를 사용할 수 없습니다. 다른 방법을 알고 있니? – Jay

+0

이벤트 (dataGridView_CellPainting)에 새 함수를 추가하고 각 행을 반복하여 각 셀 값을 확인하고 셀의 forecolor를 변경하고 문제를 해결했습니다. 귀하의 답변에 감사드립니다. :) – Jay

+0

무엇을 만드시겠습니까? 필요한 것은 Service Broker를 활성화하는 것입니다 (DB-Administrator에게'ALTER DATABASE yourDB SET ENABLE_BROKER'를 요청하십시오). 행운을 빕니다! – alex555

0

확장 메소드를 사용하여 DataGrid에 대한 이중 버퍼링을 추가하고 나중에 사용자 폼에서 true로 설정하십시오.

public static class ExtensionMethods 
{ 
    public static void DoubleBuffered(this DataGridView dgv, bool setting) 
    { 
     Type dgvType = dgv.GetType(); 
     PropertyInfo pi = dgvType.GetProperty("DoubleBuffered", 
      BindingFlags.Instance | BindingFlags.NonPublic); 
     pi.SetValue(dgv, setting, null); 
    } 
} 

dataGridView1.DoubleBuffered(true); 

참조처럼 데이터 그리드의 프로젝트에 위 클래스와 설정 이중 버퍼링 속성을 추가 : 아직도 http://bitmatic.com/c/fixing-a-slow-scrolling-datagridview

관련 문제