2011-02-27 3 views
3

현재 C# 및 MySQL 데이터베이스 백엔드를 사용하여 응용 프로그램을 개발 중입니다.MySQL에서 데이터 세트 채우기 진행 표시

내 프로그램으로 인해 데이터베이스에서 많은 양의 데이터를로드하고 DataGridView에 표시 할 데이터 집합을 추가 할 수 있습니다. DataSet을 채우는 과정을 보여줄 수는 있지만 데이터베이스에있는 위치에 대한 참조를 얻을 수있는 방법을 모르겠다.

아래 코드는 현재 가지고있는 코드입니다.

DatabaseWork dbase = new DatabaseWork(); 
try 
{ 
    dbase.openConnection(); 
    MySqlDataAdapter myDA = new MySqlDataAdapter(); 
    myDA.SelectCommand = new MySqlCommand(query, dbase.conn); 

    DataTable table = new DataTable(); 
    myDA.Fill(table); 

    BindingSource bSource = new BindingSource(); 
    bSource.DataSource = table; 

    tblDetails.DataSource = bSource; 
    //tblGrid.Columns[0].Visible = false; 
} 
catch (MySqlException ex) 
{ 
    dbase.displayError(ex.Message, ex.Number); 
} 
finally 
{ 
    dbase.closeConnection(); 
} 

는 내가 진행 상황을 보여주기 위해 배경 작업자와 같은 스레드에이 부분의 코드를 넣어하지만 어떻게 내가이 코드를 변경할 수있을 것이라는 점을 알고있다.

+2

당신도'추가 할 상당한 시간이 걸릴 수 COUNT'을 선택하고 SQL 쿼리가 얼마나 복잡한에 따라 부하에게 도움을 – Stecya

+0

감사를 표시하기 위해 단지 보복 진행 표시 줄을 사용할 수 있습니다 프로세스에 대한 대기 시간이 더 많음 – Boardy

답변

0

Stecya 주석을 사용하여 진행률 표시 줄을 선택 윤곽 진행률 막대로 구현합니다.

데이터 집합 채우기의 진행률 표시 줄을 업데이트하려면 미리 몇 개의 레코드가 있는지 알고 있어야합니다. 그런 다음 데이터 어댑터에 래핑 된 레코드 수와 같은 것을 수행해야합니다 그게 네가 할 수 있을지 잘 모르겠다.

데이터 소스에 바인딩하는 데 상당한 시간이 걸리면 마키 막대와 함께 상태 메시지가 표시되고 "레코드 검색 중"으로 업데이트 한 다음 "렌더링 레코드"행을 따라 업데이트하십시오. 대신

myDA.Fill(table); 

1

... 당신이 행에 의해 테이블 ​​행을 채울 수있을 것입니다 :

var dataReader = myDA.SelectCommand.ExecuteReader(); 
int progress = 0; 
while (dataReader.Read()) { 
    table.Rows.Add(dataReader); 
    progress++; 

    // Update progress view.. 
} 

그것은 비록 채우기 방법을 사용하는 것만 큼 깔끔하지, 그래서 난 이런 식으로하고 싶은지 확실하지 않습니다. 그리고 물론 작업의 몇 퍼센트가 완료되었는지를 보여주기 위해서는 phsr이 지적한 것처럼 "select count"또는 유사한 방법으로 테이블의 행 수를 얻어야합니다.

+0

에 대한 –

4

이 답변은 조금 늦었지만 어쩌면 다른 사람들에게 도움이 될 수 있습니다.

많은 경우 지금까지 읽은 레코드 수를 표시하면 충분합니다. DataTable.RowChanged 이벤트를 처리하여이를 수행 할 수 있습니다. 테스트 구현에서 DataAdapter.Fill-Method에 의해 추가 된 각 행에 대해 이벤트가 발생 함을 확인할 수있었습니다. 이벤트를 처리 할 때 DataTable.Rows.Count-Property를보고 숫자 레코드를 얻을 수 있습니다.

일반적으로 수행하는 작업은 레이블 또는 목록 항목을 업데이트하는 백그라운드 스레드의 데이터를 읽는 것입니다. gui를 실제로 업데이트하는 메서드는 업데이트를 레이블에 버퍼링하여 깜박임을 방지하기 위해 gui 변경이 1 초에 한 번만 발생하도록합니다.

희망이 도움이됩니다.

샤샤

+0

유용했기 때문에 'DataTable.TableNewRow' 이벤트를 사용하려고했지만 채우기 중에 실행되지 않았습니다. 'RowChanged'는 올바른 이벤트입니다. – mcNux