Public Class WebForm1
      Inherits System.Web.UI.Page
   
   
      Protected Sub btnGetData_Click(sender As Object, e As EventArgs) Handles btnGetData.Click
          Dim tst As New TestRecord
          Dim recs As List(Of TestRecord) = tst.LoadData
          Session("Data") = recs          gvwRecord.DataSource = recs
          gvwRecord.DataBind()
      End Sub
   
      Private Sub gvwRecord_RowCreated(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvwRecord.RowCreated
          If e.Row.RowType = DataControlRowType.Header Then
              Dim headerCell1 As TableCell = New TableCell()
              Dim headerCell2 As TableCell = New TableCell()
   
              headerCell1.ColumnSpan = 3
              headerCell1.Text = "Main Header 1"
              headerCell1.BackColor = Drawing.Color.LightGray
              headerCell1.HorizontalAlign = HorizontalAlign.Center
   
              headerCell2.ColumnSpan = 2
              headerCell2.Text = "Main Header 2"
              headerCell2.BackColor = Drawing.Color.LightGray
              headerCell2.HorizontalAlign = HorizontalAlign.Center
   
              Dim rowHeader1 As GridViewRow = New GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal)
              rowHeader1.Cells.Add(headerCell1)
              rowHeader1.Cells.Add(headerCell2)
              rowHeader1.ForeColor = Drawing.Color.Black
              rowHeader1.Font.Bold = True
              rowHeader1.Visible = True
              gvwRecord.Controls(0).Controls.AddAt(0, rowHeader1)
   
              Dim fields2 As TableCellCollection = e.Row.Cells
              Dim headerCell11 As TableCell = New TableCell()
              Dim headerCell12 As TableCell = New TableCell()
   
              headerCell11.ColumnSpan = 2
              headerCell11.Text = "ID and Name"
              headerCell11.BackColor = Drawing.Color.Maroon
   
              headerCell12.ColumnSpan = 3
              headerCell12.Text = "Age and Sex"
              headerCell12.BackColor = Drawing.Color.Maroon
   
              Dim rowHeader2 As GridViewRow = New GridViewRow(1, 1, DataControlRowType.Header, DataControlRowState.Normal)
              rowHeader2.Cells.Add(headerCell11)
              rowHeader2.Cells.Add(headerCell12)
   
              rowHeader2.Font.Size = 12
              rowHeader2.ForeColor = Drawing.Color.White
              rowHeader2.HorizontalAlign = HorizontalAlign.Center
              rowHeader2.Visible = True
              rowHeader2.Font.Bold = True
              gvwRecord.Controls(0).Controls.AddAt(1, rowHeader2)
   
          ElseIf e.Row.RowType = DataControlRowType.Footer Then
              Dim footerCell1 As TableCell = New TableCell()
              Dim footerCell2 As TableCell = New TableCell()
              Dim footerCell3 As TableCell = New TableCell()
              Dim footerCell4 As TableCell = New TableCell()
   
              Dim dataRecs As List(Of TestRecord) = Nothing
              Dim totalRec As Integer = 0
              Dim totalMale As Integer = 0
              Dim totalFemale As Integer = 0
              Dim totalAgeBelow30 As Integer = 0
              Dim totalAgeAbove30 As Integer = 0
   
   
              If Session("Data") IsNot Nothing Then                  dataRecs = DirectCast(Session("Data"), List(Of TestRecord))                  If Not dataRecs Is Nothing AndAlso dataRecs.Count > 0 Then
                      totalRec = dataRecs.Count
                      Dim list1 = From r As TestRecord In dataRecs Where r.Sex = "Male"
                      totalMale = list1.Count
   
                      Dim list2 = From r As TestRecord In dataRecs Where r.Sex = "Female"
                      totalFemale = list2.Count
   
                      Dim list3 = From r As TestRecord In dataRecs Where r.Age < 30
                      totalAgeBelow30 = list3.Count
   
                      Dim list4 = From r As TestRecord In dataRecs Where r.Age >= 30
                      totalAgeAbove30 = list4.Count
   
                  End If
              End If
   
              footerCell1.Text = "Summary"
              footerCell2.Text = "Age [< 30yrs: " & totalAgeBelow30.ToString() & "] [>=30yrs:" & totalAgeAbove30.ToString() & "]"
              footerCell3.ColumnSpan = 2
              footerCell3.Text = "Male: " & totalMale.ToString() & " Female:" & totalFemale.ToString()
              footerCell4.Text = "Total Count:" & totalRec.ToString()
   
              Dim rowFooter1 As GridViewRow = New GridViewRow(gvwRecord.Rows.Count + 3, 0, DataControlRowType.Footer, DataControlRowState.Normal)
              rowFooter1.Cells.Add(footerCell1)
              rowFooter1.Cells.Add(footerCell2)
              rowFooter1.Cells.Add(footerCell3)
              rowFooter1.Cells.Add(footerCell4)
              rowFooter1.ForeColor = Drawing.Color.Black
              rowFooter1.BackColor = Drawing.Color.LightGray
              rowFooter1.HorizontalAlign = HorizontalAlign.Left
              rowFooter1.Font.Bold = True
              rowFooter1.Visible = True
   
              For cellCount As Integer = 0 To rowFooter1.Cells.Count - 1
                  rowFooter1.Cells(cellCount).Wrap = False
              Next
              gvwRecord.Controls(0).Controls.AddAt(gvwRecord.Rows.Count + 3, rowFooter1)
   
          End If
      End Sub
  End Class
   
  Public Class TestRecord
      Public Property ID As Integer = 0
      Public Property Name As String = String.Empty
      Public Property Age As Integer = 18
      Public Property Sex As String = "Male"
      Public Property Title As String = "CEO"
   
      Public Sub New()
   
      End Sub
   
      Public Sub New(ByVal ID As Integer, ByVal name As String, ByVal age As Integer, ByVal sex As String, ByVal title As String)
          Me.ID = ID
          Me.Name = name
          Me.Age = age
          Me.Sex = sex
          Me.Title = title
      End Sub
   
      Public Function LoadData() As List(Of TestRecord)
          Dim recs As New List(Of TestRecord)
          For i = 0 To 10
              Dim rec As New TestRecord(i, "LastName" & i.ToString & ", FirstName" & i.ToString(), 25 + i, IIf(i Mod 2 = 0, "Male", "Female").ToString, "Title #" & i.ToString)
              recs.Add(rec)
          Next
          Return recs
      End Function
  End Class