Sub Page_Load(Sender As Object, E As EventArgs) Handles MyBase.Load
" TODO: Update the ConnectionString and CommandText values for your application
dim ConnectionString as string = "server=localhost;database=northwind;UID=sa"
Dim CommandText As String = "Select CASE WHEN (Grouping(CategoryName)=1) THEN " & _
""MainTotal" ELSE categoryname END AS CategoryName, "
CommandText &= " CASE WHEN (Grouping(ProductName)=1) THEN "SubTotal" ELSE " & _
"Productname END AS ProductName,"
CommandText &= " Sum(UnitPrice) as unitprice, "
CommandText &= " Sum(UnitsinStock) as UnitsinStock "
CommandText &= " from Products INNER JOIN Categories On Products.categoryID = " & _
" Categories.CategoryID"
CommandText &= " Group By Categoryname, ProductName WITh ROLLUP "
Dim myConnection As New SqlConnection(ConnectionString)
Dim myCommand As New SqlDataAdapter(CommandText, myConnection)
Dim ds As New DataSet
myCommand.Fill(ds)
Dim curCat As String ‘指示当前记录中产品所属的类别
Dim prevCat As String ‘指示上一条记录中产品所属的类别
Dim i As Integer = 0 ‘要插入分类标题行的位置,用I表示
"遍历结果集,找出要插入分类标题的行
Do While i <= ds.Tables(0).Rows.Count - 1
curCat = ds.Tables(0).Rows(i).Item(0)
If curCat <> prevCat Then ‘如果发现前后两记录的所属类别不一样
prevCat = curCat
Dim shRow As DataRow = ds.Tables(0).NewRow
shRow(1) = ds.Tables(0).Rows(i).Item(0)
"Change ItemDataBound marker to Negative Number
shRow(2) = -1 ‘‘设置一个临时的标记
ds.Tables(0).Rows.InsertAt(shRow, i)
i += 1
End If
i += 1
Loop
‘将最后一行的标题改为total
ds.Tables(0).Rows(ds.Tables(0).Rows.Count - 1).Item(1) = "Total"
DataGrid1.DataSource = ds
DataGrid1.DataBind()
End Sub