datagrid header

Posted: 01-16-2004, 07:58 PM
Is it possible to have an overall header that spans across all
columns?
An example would be a class schedule for student Ben.

|Ben |English |Thursday |
|Ben |Geology |Monday |
|Ben |Physics |Tuesday |

I want it to look like this:

| Ben |

|English |Thursday |
|Geology |Monday |
|Physics |Tuesday |

In other words, hide the student column and make it a non-repeatable
value in the datagrid header. Note, each datagrid would have only one
student name. Thanks for any help.
Reply With Quote

Responses to "datagrid header"

Ken Cox [Microsoft MVP]
Guest
Posts: n/a
 
Re: datagrid header
Posted: 01-20-2004, 01:24 AM
Here's one possibility... create your own header and put the student's name
in it. Then, just display the two columns.

Dim dt As DataTable
Private Sub Page_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
DataGrid1.DataSource = CreateDataSource()
DataGrid1.DataBind()
End Sub

Private Sub DataGrid1_ItemDataBound _
(ByVal sender As Object, _
ByVal e As _
System.Web.UI.WebControls.DataGridItemEventArgs) _
Handles DataGrid1.ItemDataBound
' Add the header and text
If e.Item.ItemType = ListItemType.Header Then
' Get the collection of cells from the grid
Dim tcells As TableCellCollection
tcells = e.Item.Cells
' Create a new cell
Dim fcell As New TableCell
Dim lblHeader As New Label
' Assign text to the label
lblHeader.Text = dt.Rows(0).Item(0)
fcell.Controls.Add(lblHeader)
' Span the cell to however many columns there are
fcell.ColumnSpan = tcells.Count
' Create a new footer object
Dim dgItemHeader As New DataGridItem _
(0, 0, ListItemType.Header)
Dim dgItemOldHeader As DataGridItem
' Create an instance of the header
'from the current header object
dgItemOldHeader = e.Item
' Delete the existing header
DataGrid1.Controls(0).Controls.Remove(dgItemOldHea der)
' Add the cell to the header
dgItemHeader.Cells.Add(fcell)
dgItemHeader.Visible = True
' Add the header to the datagrid
DataGrid1.Controls(0).Controls.Add(dgItemHeader)
End If
End Sub
Function CreateDataSource() As ICollection
' Create sample data for the DataList control.
dt = New DataTable
Dim dr As DataRow
' Define the columns of the table.
dt.Columns.Add(New DataColumn("Student", GetType(String)))
dt.Columns.Add(New DataColumn("Subject", GetType(String)))
dt.Columns.Add(New DataColumn("Day", GetType(String)))
' Populate the table with sample values.
dr = dt.NewRow
dr(0) = "Ben"
dr(1) = "English"
dr(2) = "Thursday"
dt.Rows.Add(dr)
dr = dt.NewRow
dr(0) = "Ben"
dr(1) = "Geology"
dr(2) = "Monday"
dt.Rows.Add(dr)
dr = dt.NewRow
dr(0) = "Ben"
dr(1) = "Physics"
dr(2) = "Tuesday"
dt.Rows.Add(dr)
Dim dv As DataView = New DataView(dt)
Return dv
End Function

<asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundColumn DataField="Subject"></asp:BoundColumn>
<asp:BoundColumn DataField="Day"></asp:BoundColumn>
</Columns>
</asp:DataGrid>

"Cambridgeways" <cambridgeways@hotmail.com> wrote in message
news:e0774553.0401161258.10fe981@posting.google.co m...
> Is it possible to have an overall header that spans across all
> columns?
> An example would be a class schedule for student Ben.
>
> |Ben |English |Thursday |
> |Ben |Geology |Monday |
> |Ben |Physics |Tuesday |
>
> I want it to look like this:
>
> | Ben |
>
> |English |Thursday |
> |Geology |Monday |
> |Physics |Tuesday |
>
> In other words, hide the student column and make it a non-repeatable
> value in the datagrid header. Note, each datagrid would have only one
> student name. Thanks for any help.
Reply With Quote
Cambridgeways
Guest
Posts: n/a
 
Re: datagrid header
Posted: 01-24-2004, 03:31 AM
Thanks for your time and attention. I ended up doing something very similar.

"Ken Cox [Microsoft MVP]" <BANSPAMken_cox@sympatico.ca> wrote in message news:<uQ85Nyv3DHA.3360@tk2msftngp13.phx.gbl>...
> Here's one possibility... create your own header and put the student's name
> in it. Then, just display the two columns.
>
> Dim dt As DataTable
> Private Sub Page_Load _
> (ByVal sender As System.Object, _
> ByVal e As System.EventArgs) _
> Handles MyBase.Load
> DataGrid1.DataSource = CreateDataSource()
> DataGrid1.DataBind()
> End Sub
>
> Private Sub DataGrid1_ItemDataBound _
> (ByVal sender As Object, _
> ByVal e As _
> System.Web.UI.WebControls.DataGridItemEventArgs) _
> Handles DataGrid1.ItemDataBound
> ' Add the header and text
> If e.Item.ItemType = ListItemType.Header Then
> ' Get the collection of cells from the grid
> Dim tcells As TableCellCollection
> tcells = e.Item.Cells
> ' Create a new cell
> Dim fcell As New TableCell
> Dim lblHeader As New Label
> ' Assign text to the label
> lblHeader.Text = dt.Rows(0).Item(0)
> fcell.Controls.Add(lblHeader)
> ' Span the cell to however many columns there are
> fcell.ColumnSpan = tcells.Count
> ' Create a new footer object
> Dim dgItemHeader As New DataGridItem _
> (0, 0, ListItemType.Header)
> Dim dgItemOldHeader As DataGridItem
> ' Create an instance of the header
> 'from the current header object
> dgItemOldHeader = e.Item
> ' Delete the existing header
> DataGrid1.Controls(0).Controls.Remove(dgItemOldHea der)
> ' Add the cell to the header
> dgItemHeader.Cells.Add(fcell)
> dgItemHeader.Visible = True
> ' Add the header to the datagrid
> DataGrid1.Controls(0).Controls.Add(dgItemHeader)
> End If
> End Sub
> Function CreateDataSource() As ICollection
> ' Create sample data for the DataList control.
> dt = New DataTable
> Dim dr As DataRow
> ' Define the columns of the table.
> dt.Columns.Add(New DataColumn("Student", GetType(String)))
> dt.Columns.Add(New DataColumn("Subject", GetType(String)))
> dt.Columns.Add(New DataColumn("Day", GetType(String)))
> ' Populate the table with sample values.
> dr = dt.NewRow
> dr(0) = "Ben"
> dr(1) = "English"
> dr(2) = "Thursday"
> dt.Rows.Add(dr)
> dr = dt.NewRow
> dr(0) = "Ben"
> dr(1) = "Geology"
> dr(2) = "Monday"
> dt.Rows.Add(dr)
> dr = dt.NewRow
> dr(0) = "Ben"
> dr(1) = "Physics"
> dr(2) = "Tuesday"
> dt.Rows.Add(dr)
> Dim dv As DataView = New DataView(dt)
> Return dv
> End Function
>
> <asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False">
> <Columns>
> <asp:BoundColumn DataField="Subject"></asp:BoundColumn>
> <asp:BoundColumn DataField="Day"></asp:BoundColumn>
> </Columns>
> </asp:DataGrid>
>
> "Cambridgeways" <cambridgeways@hotmail.com> wrote in message
> news:e0774553.0401161258.10fe981@posting.google.co m...
> > Is it possible to have an overall header that spans across all
> > columns?
> > An example would be a class schedule for student Ben.
> >
> > |Ben |English |Thursday |
> > |Ben |Geology |Monday |
> > |Ben |Physics |Tuesday |
> >
> > I want it to look like this:
> >
> > | Ben |
>
> > |English |Thursday |
> > |Geology |Monday |
> > |Physics |Tuesday |
> >
> > In other words, hide the student column and make it a non-repeatable
> > value in the datagrid header. Note, each datagrid would have only one
> > student name. Thanks for any help.
Reply With Quote
 
LinkBack Thread Tools Search this Thread Display Modes
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
get more control on datagrid header (?) Manit I ASP.NET Data Grid Control 2 01-15-2004 06:12 AM
Datagrid header size Mark Lyday ASP.NET Data Grid Control 1 11-14-2003 11:38 PM
Edit DataGrid Header Mike Smith ASP.NET Data Grid Control 4 09-21-2003 07:35 PM
Fixed datagrid header, abacnet ASP.NET Data Grid Control 3 08-12-2003 01:17 AM
DataGrid header and <TH> Bassel Tabbara [MSFT] ASP.NET General 1 06-27-2003 07:13 PM