prova a vedere se ti è utile
Io preferisco costruirmi un literal (in questo caso ho semplificato).
Metto in un vettore bidimensionale o in una lista ordinata, e faccio le modifche controllando la rottura della chiave...
codice:
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim vettore As String(,) = {{"1", "prova1", "c"}, {"1", "prova1", "v"}, {"1", "prova1", "f"}, _
{"2", "prova2", "g"}, {"2", "prova2", "h"}, {"2", "prova2", "p"}, _
{"3", "prova3", "x"}, {"3", "prova3", "y"}, {"3", "prova3", "z"}, {"3", "prova3", "w"} _
}
Dim chiave As String = ""
Dim chiave0 As String = ""
Dim contatore As Integer = 1
Dim sb As New StringBuilder()
'1° record
chiave0 = vettore(0, 0) & vettore(0, 1)
sb.Append("record " & contatore & "
")
sb.Append(vettore(0, 1) & " " & vettore(0, 2))
sb.Append("
")
'record seguenti
For i As Integer = 1 To vettore.GetUpperBound(0)
chiave = vettore(i, 0) & vettore(i, 1)
If chiave <> chiave0 Then
contatore += 1
sb.Append("
")
sb.Append("record " & contatore & "
")
chiave0 = chiave
sb.Append(vettore(i, 1) & " " & vettore(i, 2))
sb.Append("
")
Else
sb.Append(vettore(i, 2))
sb.Append("
")
End If
Next
Me.Literal1.Text = sb.ToString
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Pagina senza titolo</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
</div>
</form>
</body>
</html>