Alla fine ho risolto in questo modo:
Dim ds as DataSet = new DataSet()
'Lo riempio
objAdapter.Fill(ds, "TABELLA")
Dim currentCategory As String = [String].Empty
' prendo i dati dal DataSet popolato
Dim dt As DataTable = ds.Tables(0)
Dim i As Integer
For i = 0 To dt.Rows.Count - 1
' controllo se la categoria è la stessa della riga precedente
If ds.Tables(0).Rows(i)("data").ToString() <> currentCategory Then
' aggiungo una nuova riga al DataTable
Dim dr As DataRow = dt.NewRow()
dr(0) = dt.Rows(i)("data").ToString()
dt.Rows.InsertAt(dr, i)
' response.write("pippo")
End If
' salvo la categoria corrente
currentCategory = ds.Tables(0).Rows(i)("data").ToString()
Next i
currentCategory = [String].Empty
' faccio il binding dei dati sul datagrid
dg.DataSource = dt
dg.DataBind()
End Sub
' routine per intercettare il databind e modifica il DataGrid
private Sub dg_ItemDataBound(sender As Object, e As DataGridItemEventArgs)
Dim currentCategory As String
If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
' controllo se la categoria è sempre la stessa
' la cerco nella prima colonna, le altre sono vuote
If e.Item.Cells(0).Text <> currentCategory Then
' cambio il colspan, così la cella è grande tutta la riga
e.Item.Cells(0).ColumnSpan = e.Item.Cells.Count
response.write("pippo")
' e tolgo via le altre celle
Dim i As Integer
For i = 1 To e.Item.Cells.Count - 1
e.Item.Cells.RemoveAt(i)
Next i
Else
' rimuovo solo la prima riga, che contiene la categoria
e.Item.Cells.RemoveAt(0)
End If
' salvo il titolo corrente prima di continuare il ciclo
currentCategory = e.Item.Cells(0).Text
response.write("pippo")
End If
End Sub 'dg_ItemDataBound
Mi aggiunge la linea come volevo, credo però non funzioni la routine per intercettare il databind e modificare il DataGrid.. Non so se ho sbagliato qualcosa nella traduzione da c a vb o che..
Oltre a questo, facendo in questo modo, e non creandomi da codice la tabella, non so come aggiungere il simbolo "%" di fianco ad alcuni valori..
:(
