sto combattendo col DataGridView, e sto perdendo

Leggo i dati da una tabella in un DataTable. Vi è una colonna numerica e vorrei vedere al suo fianco, il progressivo.

L'sql l'ho fatta così:
codice:
Private sql As String = "select conto.*, 0.0 as progressivo from conto "
Il caricamento dati l'ho fatto con questo codice:
codice:
Using con As New o.OdbcConnection(stringaConnessione)
	con.Open()
	dt = msodbc.GetDataTable(con, sql)
	Dim progressivo As Decimal = 0
	For Each r As DataRow In dt.Rows
		progressivo += CDec(NullToZero(r("valore_operazione")))
		r("progressivo") = progressivo
		r.AcceptChanges()
	Next

End Using
Questo il problema. Se ordino la griglia asc o disc per qualsiasi campo, debbo riscrivermi il progressivo.
In che evento lo faccio?

Ho provato a farlo nell'evento Sorded, come da codice, ma non va. Mi dareste una mano?


codice:
Private Sub DataGridView1_Sorted(sender As Object, e As System.EventArgs) Handles DataGridView1.Sorted
	Dim progressivo As Decimal = 0
	For Each r As DataRow In dt.Rows
		Dim status_old As DataRowState = r.RowState
		progressivo += CDec(NullToZero(r("valore_operazione")))
		r("progressivo") = progressivo

		If status_old = DataRowState.Unchanged Then
			r.AcceptChanges()
		End If
	Next

End Sub