Ask a Question related to ASP.NET Data Grid Control, Design and Development.
-
Cambridgeways #1
datagrid header
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.
Cambridgeways Guest
-
extra datagrid header...
I was wondering if there is a way I can add an extra header to a datagrid? I found this solution on the internet - but it seems quite old and... -
Removing the datagrid header.....
How to remove the datagrid header display ? Which property I should change ? Thanks -
get more control on datagrid header (?)
Dear all, I add more header's row on runtime using ItemCreate() and add DataGridItem(0, 0, ListItemType.Header) to get more header row. and... -
Fixed datagrid header,
Hi eveybody, I have a datagrid that can show many rows, so there is a vertical scrollbar. The problem is that when users scroll down, they loose... -
DataGrid header and <TH>
Hello Vaclav, You might use the HeaderStyle of the DataGrid which will create Th on the client side. You can also attach style attribute to this... -
Ken Cox [Microsoft MVP] #2
Re: datagrid header
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.Ken Cox [Microsoft MVP] Guest
-
Cambridgeways #3
Re: datagrid header
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.Cambridgeways Guest



Reply With Quote

