Progressbar et datagridview
Bonjour, Je charge des donnees d'une base dans un dataset ,le traitement est assez lourd. Pour ne pas que l'utilisateur pense que l'appli ne repond pas j'ai essayé d'integrer une Progressbar ca fait 2 semaines que je planche sur le sujet. Mais là je n'ais plus de visibilité et je m'en mêle les pinceaux.
Voila où j'en suis: L'importation des données se fait au clique d'un bouton.
Voici mon code:
Code:
1 2 3 4 5 6 7 8
| // Le bouton
private void Bt_exp_Click(object sender, EventArgs e)
{
this.DgResultat.DataSource = null;
Thread t = new Thread(new ThreadStart(ThreadMethod));
t.Start();
} |
// Le traitement dasn le Thread(base de donnees -> Datagridview)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
private void actualiser_dg(){
MonDataAdapter.Fill(ds, flux);
DgResultat.DataSource = ds.Tables[flux].DefaultView;
foreach (DataGridViewRow currentRow in DgResultat.Rows)
{
currentRow.Selected = false;
if (currentRow.IsNewRow == false)
{
//Traitement lourd...
}
Show_ProgressBar();
}
MyProgressBar.ReInit();
} |
// La progressbar
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
private void Show_ProgressBar()
{
if (InvokeRequired) //si on n'est pas dans le thread principal
{
Invoke(new progress(Show_ProgressBar));
} else{
MyProgressBar.Max = DgResultat.RowCount;
MyProgressBar.PerformSteps();
}
} |
// La méthode appelé dans le thread
Code:
1 2 3 4 5 6 7
|
private void ThreadMethod()
{
this.Invoke(new progress(actualiser_dg));
} |
La progressbar evolue bien pendant le chargement mais ralentie considerablement le temps de chargement.