Se abbiamo bisogno di una soluzione veloce per visualizzare l'avanzamento di un controllo ProgressBar durante il caricamento di un DataTable, possiamo gestire l'evento RowChanded in questo modo:
1 Private Sub CustomRowChanged(ByVal sender As Object, ByVal e As DataRowChangeEventArgs)
2
3 If (e.Action = DataRowAction.Commit) Then
4 'Avanziamo il valore della progress bar
5 ProgressBar1.Value += 1
6 Application.DoEvents()
7 End If
8
9 End Sub
Il codice per popolare il DataTable con i dati e per registrare il gestore eventi personalizzato può essere del tipo:
1 'Imposto la proprietà Maximux del controllo ProgressBar
2 ProgressBar1.Value = 0
3 ProgressBar1.Maximum = GetNumeroRecords()
4
5 'Registro il gestore eventi personalizzato
6 AddHandler Articoli.ArticoliDataTable.RowChanged, AddressOf CustomRowChanged
7
8 Try
9 DataGridView1.SuspendLayout()
10
11 'Popolo il DataTable
12 ArticoliTableAdapter.Fill(Articoli.ArticoliDataTable)
13
14 MessageBox.Show(String.Format("Caricati {0} records",Articoli.ArticoliDataTable.Rows.Count))
15
16 Catch ex As Exception
17 MessageBox.Show(ex.Message)
18 Finally
19 DataGridView1.ResumeLayout()
20 'Rimuovo l'handler...
21 RemoveHandler Articoli.ArticoliDataTable.RowChanged, AddressOf CustomRowChanged
22 End Try
Ovviamente si potrebbero usare modelli di programmazione asincrona o popolare dati mediante un thread diverso da quello principale.